Iphone 了解设备类型——视网膜/非视网膜
可能重复:Iphone 了解设备类型——视网膜/非视网膜,iphone,objective-c,cocoa-touch,ios,Iphone,Objective C,Cocoa Touch,Ios,可能重复: 我们如何从objective C代码中知道设备是否有视网膜显示?您可以检查[UIScreen mainScreen]上的缩放属性,如果在视网膜上运行的是2.0,如果不是1.0。您还可以从当前CoreGraphics上下文中获取比例。我认为您无法直接确定。您必须根据可以从sysctlbyname返回的模型信息来推断它(请参见iOS手册页)。例如: if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] &
我们如何从objective C代码中知道设备是否有视网膜显示?您可以检查
[UIScreen mainScreen]
上的缩放属性,如果在视网膜上运行的是2.0,如果不是1.0。您还可以从当前CoreGraphics上下文中获取比例。我认为您无法直接确定。您必须根据可以从sysctlbyname返回的模型信息来推断它(请参见iOS手册页)。例如:
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]
&& [[UIScreen mainScreen] scale] >= 2.0) {
// Retina
} else {
// Not Retina
}
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
将返回一个字符串,如“iPhone3,1”有视网膜显示,或“iPhone2,1”没有视网膜显示。为什么需要它?就像时区与视网膜显示有什么关系一样?如果用户在iOS<4上正确运行,应用程序将崩溃。这就是为什么要首先检查[[UIScreen mainScreen]respondsToSelector:@selector(scale)]是否为真。这是如何编写代码以确保向后兼容性的一般概念。这是一个糟糕的想法,根本不能证明未来的兼容性,甚至不能说明第四代iPodtouch也有视网膜显示器。其他答案中描述的UIScreen
类的scale
属性是正确的方法。这一点很好。我的观点是正确的。现在这应该是>=2.0(iPhone 6/6+)