判斷方法:
我們在適配多個機型時,大多情況下都需要考慮到用戶設備的型號,然後根據用戶設備的width,height,分辨率等來決定控件或圖片的大小。那麼如何獲知用戶設備的型號呢?
我個人是通過(下面這個方法)
1
[[UIScreen mainScreen] bounds];
來獲取主屏幕的bounds,熟悉的朋友一看到bound或frame肯定就會想到CGRect 這個結構體(struct),而bounds當然也是這個結構體的一個變量
其中CGRect的成員中有一個CGSize(也是結構體),CGSize的成員包括width,height
所以當前我們就獲得主屏幕的寬以及高了,然後對應下邊的數據就可知道用戶使用的具體機型了
如下:各系列機型豎屏時的 寬*高
portrait width * height
iPhone4:320*480
iPhone5:320*568
iPhone6:375*667
iPhone6Plus:414*736
數據參考於 IOS設備設計完整指南 一文
代碼示例:
此處創建了一個UIDevice的category
UIDevice+IPhoneModel.h
1 typedef NS_ENUM(char, iPhoneModel){//0~3
2 iPhone4,//320*480
3 iPhone5,//320*568
4 iPhone6,//375*667
5 iPhone6Plus,//414*736
6 UnKnown
7 };
8
9 @interface UIDevice (IPhoneModel)
10
11 /**
12 * return current running iPhone model
13 *
14 * @return iPhone model
15 */
16 + (iPhoneModel)iPhonesModel;
17
18 @end
UIDevice+IPhoneModel.m
1 #import "UIDevice+IPhoneModel.h"
2
3 @implementation UIDevice (IPhoneModel)
4
5 /**
6 * return current running iPhone model
7 *
8 * @return iPhone model
9 */
10 + (iPhoneModel)iPhonesModel {
11 //bounds method gets the points not the pixels!!!
12 CGRect rect = [[UIScreen mainScreen] bounds];
13
14 CGFloat width = rect.size.width;
15 CGFloat height = rect.size.height;
16
17 //get current interface Orientation
18 UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
19 //unknown
20 if (UIInterfaceOrientationUnknown == orientation) {
21 return UnKnown;
22 }
23
24 // portrait width * height
25 // iPhone4:320*480
26 // iPhone5:320*568
27 // iPhone6:375*667
28 // iPhone6Plus:414*736
29
30 //portrait
31 if (UIInterfaceOrientationPortrait == orientation) {
32 if (width == 320.0f) {
33 if (height == 480.0f) {
34 return iPhone4;
35 } else {
36 return iPhone5;
37 }
38 } else if (width == 375.0f) {
39 return iPhone6;
40 } else if (width == 414.0f) {
41 return iPhone6Plus;
42 }
43 } else if (UIInterfaceOrientationLandscapeLeft == orientation || UIInterfaceOrientationLandscapeRight == orientation) {//landscape
44 if (height == 320.0) {
45 if (width == 480.0f) {
46 return iPhone4;
47 } else {
48 return iPhone5;
49 }
50 } else if (height == 375.0f) {
51 return iPhone6;
52 } else if (height == 414.0f) {
53 return iPhone6Plus;
54 }
55 }
56
57 return UnKnown;
58 }
59
60 @end