繁体   English   中英

如何区分ipad mini和ipad air?

[英]How to differ between ipad mini and ipad air?

当我在模拟器上运行ipad mini(我使用的是ipad 2配置文件)和ipad air它显示相同的分辨率1024x768

对于UI Kit,它可能会自动调整,但我使用cocos2d

Apple真的不希望你能够发现这一点,所以他们没有提供一个简单的方法来做到这一点。 我想你应该问自己为什么需要知道。

也就是说,我碰巧有一个“标尺应用程序”,这可能是以不同方式对待迷你游戏的极少数合法理由之一。 我把它放在UIDevice上的一个类别中

接口:

//  UIDevice+JEFkit.h

typedef NS_ENUM (NSUInteger, deviceClass) {

deviceClass_iPhone = 0,    
deviceClass_iPhoneTall = 1,    
deviceClass_iPhoneSix = 2,     
deviceClass_iPhoneSixPlus= 3,

 deviceClass_iPadMini = 10,
 deviceClass_iPad = 11,

deviceClass_unknown

};

@interface UIDevice (JEFkit)

#pragma mark device type..

+(deviceClass )deviceClass;
//some other stuff..
@end

执行:

+(deviceClass )deviceClass{

  NSUInteger greater = ((NSUInteger )fmaxf([[UIScreen mainScreen]bounds].size.width, [[UIScreen mainScreen]bounds].size.height));

  switch (greater) {
    case 480:
      return deviceClass_iPhone;
      break;
    case 568:
      return deviceClass_iPhoneTall;
      break;
    case 667:
      return deviceClass_iPhoneSix;
      break;
    case 736:
      return deviceClass_iPhoneSixPlus;
      break;
    case 1024:
      // its an ipad, what size ?
    {

      size_t size1;
      sysctlbyname("hw.machine", NULL, &size1, NULL, 0);
      char *machine1 = malloc(size1 + 1);
      sysctlbyname("hw.machine", machine1, &size1, NULL, 0);
      machine1[size1] = 0;

      if (strcmp(machine1, "iPad1,1") == 0 || strcmp(machine1, "iPad2,1") == 0 || strcmp(machine1, "iPad2,2") == 0 || strcmp(machine1, "iPad2,3") == 0 || strcmp(machine1, "iPad2,4") == 0 ) {

        /* iPad 1 or 2 */
        free(machine1);
        return deviceClass_iPad;
      }

      if ([[UIScreen mainScreen]respondsToSelector:@selector(scale)]) {
        if ([[UIScreen mainScreen] scale] < 2.0) {
          free(machine1);


          return deviceClass_iPadMini; //all other non-retina full sized iPad devices are eliminated, must be first GEN mini

          /// nb the iPad simulator also in here..

        }
      }else{
        ///does not respond to @selector(scale)
        /// should not ever happen

        free(machine1);
        return deviceClass_iPad;
      }

      //ok only retina ipads are left...
      if (strcmp(machine1, "iPad4,4") == 0 || strcmp(machine1, "iPad4,5") == 0 || strcmp(machine1, "iPad4,6") == 0 || strcmp(machine1, "iPad4,7") == 0 || strcmp(machine1, "iPad4,8") == 0 || strcmp(machine1, "iPad4,9") == 0) {
        /* 2nd/3rd gen minis w retina*/


        ////TODO////

        /// future retina minis !!! ///

        free(machine1);
        return deviceClass_iPadMini;
      }

      //known retina minis are eliminated..

      free(machine1);
      return deviceClass_iPad;
    }
      break;
    default:
      break;
  }

  return deviceClass_unknown;
}

您可以在UIDevice类中使用model方法来区分不同的设备。 更重要的是,您可以使用此开源框架https://github.com/erichoracek/UIDevice-Hardware 使用它可能更方便。

如果您的问题是关于视网膜与非视网膜,那么UIScreen有一系列查询屏幕参数的方法(例如[UIScreen scale])。

但是如果你想处理dpi差异(以及相关按钮的最小尺寸),请查看使用iPhone SDK确定设备(iPhone,iPod Touch) 但警告:设备列表已打开,因此每当出现新设备时,您都必须更新您的应用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM