2015-02-10 50 views
1

当我在模拟器iPad的迷你(我现在用ipad 2的配置文件)和iPad的空气运行显示UI套件相同的分辨率1024×768ipad mini和ipad air的区别?

它可能会自动调整,但我使用cocos2d的

回答

4

苹果并不真的希望你能够检测到这一点,所以他们没有提供一个简单的方法来做到这一点。我想你应该真的问自己为什么你需要知道。这就是说,我碰巧有一个'标尺应用程序',这可能是为数不同的几个正当理由之一。我把这个在一个类别上的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; 
} 
+0

告诉你什么是令人印象深刻的+1 – Popeye 2015-02-12 08:37:42

0

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

+2

如果您确实拥有iPad mini并尝试此操作,您会发现它会返回与iPad相同的结果!对不起,不好回答:( – Jef 2015-02-10 05:46:14

-1

如果你的问题是关于视网膜与非视网膜然后UIScreen有一堆的查询方法屏幕参数(例如[UIScreen scale])。

但是,如果你想处理dpi的差异(和相关的按钮最小尺寸),那么请看看Determine device (iPhone, iPod Touch) with iPhone SDK。但是警告:设备列表已打开,因此无论何时出现新设备,您都必须更新您的应用。

相关问题