iOS-判断用户当前设备型号(iPhone model)

最近忙着准备面试,好久没有总结自己在做app中遇到的一些问题。今晚便来一发,以下仅属个人愚见,如有更好的方法还望请指出,谢谢。


 判断方法:

我们在适配多个机型时,大多情况下都需要考虑到用户设备的型号,然后根据用户设备的width,height,分辨率等来决定控件或图片的大小。那么如何获知用户设备的型号呢?

我个人是通过(下面这个方法)  

[[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

 相关问题: 三种获取当前界面方向方法的不同之处

http://stackoverflow.com/questions/7968451/different-ways-of-getting-current-interface-orientation

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。