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