以编程方式检测iPad是否有Retina显示屏?

时间:2012-03-13 17:24:00

标签: objective-c ios ipad

我如何以编程方式(Objective-C)iPad是否有Retina显示屏?

2 个答案:

答案 0 :(得分:19)

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && [[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [UIScreen mainScreen].scale > 1)
{
    // new iPad
}

答案 1 :(得分:5)

正如其他海报所回答的那样,你应该检查功能而不是模型。但是,在您可能想要识别特定模型的少数几个模糊情况中,您可以使用hw.machine sysctrl,如下所示。请注意,如果您无法识别模型,那很可能是因为您的代码在新模型上运行,所以在这种情况下您应该做一些合理的事情。

#include <sys/types.h>
#include <sys/sysctl.h>

// Determine the machine name, e.g. "iPhone1,1".
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0); // Get size of data to be returned.
char *name = malloc(size);
sysctlbyname("hw.machine", name, &size, NULL, 0);

NSString *machine = [NSString stringWithCString:name encoding:NSASCIIStringEncoding];
free(name);

现在您可以将“机器”与已知值进行比较。例如,检测iPad(2012年3月)型号:

if ([machine hasPrefix:@"iPad3,"]) NSLog(@"iPad (March 2012) detected");