• 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

  • 相关阅读:
    Fusion access
    组网架构
    DHCP中继
    Vxlan配置
    redis多实例
    ansible实现redis角色
    ansible如何ssh免密链接(基于key验证)
    MySQL主从复制
    MySQL范例
    Ubuntu2004安装
  • 原文地址:https://www.cnblogs.com/fu4904/p/4461696.html
Copyright © 2020-2023  润新知