以下僅屬個人愚見,如有更好的方法還望請指出,謝謝。
判斷方法:
我們在適配多個機型時,大多情況下都需要考慮到用戶設備的型號,然后根據用戶設備的width,height,分辨率等來決定控件或圖片的大小。那么如何獲知用戶設備的型號呢?
我個人是通過(下面這個方法)
[[UIScreen mainScreen] bounds];
來獲取主屏幕的bounds,熟悉的朋友一看到bound或frame肯定就會想到CGRect 這個結構體(struct),而bounds當然也是這個結構體的一個變量
其中CGRect的成員中有一個CGSize(也是結構體),CGSize的成員包括width,height
有了主屏幕的寬以及高,只需要對應下邊寬高的數據即可知用戶使用的機型
如下:各系列機型豎屏時的 寬*高
portrait width * height
iPhone4系列(4s): 320*480
iPhone5系列(5s/5c): 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
相關問題: 三種獲取當前界面方向方法的不同之處
http://stackoverflow.com/questions/7968451/different-ways-of-getting-current-interface-orientation