iOS-判斷用戶當前設備型號(iPhone model)


以下僅屬個人愚見,如有更好的方法還望請指出,謝謝。


 判斷方法:

我們在適配多個機型時,大多情況下都需要考慮到用戶設備的型號,然后根據用戶設備的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM