如何区别ipad mini和ipad air?

当我在模拟器上运行ipad mini(我使用的是ipad 2configuration文件)和ipad air,它显示了相同的分辨率1024×768

UI套件可能会自动调整,但我使用cocos2d

苹果公司并不希望你能够检测到这一点,所以他们没有提供一个简单的方法来做到这一点。 我想你应该问自己为什么你需要知道。

这就是说,我碰巧有一个“尺子应用程序”,这可能是为数不同的极less数合法理由之一。 我把它放在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的差异(和相关的button最小尺寸),那么请看看iPhone SDK的确定设备(iPhone,iPod Touch) 。 但是警告:设备列表是开放的,所以无论何时出现新设备,您都必须更新您的应用。