iOS SDK是否提供了一种简单的方法来检查currentDevice是否具有高分辨率的显示器(retina) ?

我现在发现的最好的方法是:

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {
         // RETINA DISPLAY
    }

当前回答

为了在所有iOS设备上可靠地检测视网膜显示,你需要检查设备是否运行iOS4+,以及[UIScreen mainScreen]。缩放属性等于2.0。如果scale属性存在,你不能假设设备正在运行iOS4+,因为iPad 3.2也包含这个属性。

在运行iOS3.2的iPad上,比例在1倍模式下将返回1.0,在2倍模式下将返回2.0——尽管我们知道该设备不包含视网膜显示屏。苹果在iPad的iOS4.2中改变了这一行为:它在1x和2x模式下都返回1.0。你可以自己在模拟器中进行测试。

我在主屏幕上测试了-displayLinkWithTarget:selector:方法,它存在于iOS4中。x而不是iOS3.2,然后检查屏幕的比例:

if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
    ([UIScreen mainScreen].scale == 2.0)) {
  // Retina display
} else {
  // non-Retina display
}

其他回答

SSToolkit有一个这样做的方法:

http://sstoolk.it/documentation/Categories/UIScreen (SSToolkitAdditions) . html

它的用法如下:

[[UIScreen mainScreen] isRetinaDisplay];

@sickp的答案是正确的。为了简化操作,将这一行添加到共享中。pch文件:

#define IS_RETINA ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale >= 2.0))

然后在任何文件中你都可以这样做:

if(IS_RETINA)
{
   // etc..
}

为了在所有iOS设备上可靠地检测视网膜显示,你需要检查设备是否运行iOS4+,以及[UIScreen mainScreen]。缩放属性等于2.0。如果scale属性存在,你不能假设设备正在运行iOS4+,因为iPad 3.2也包含这个属性。

在运行iOS3.2的iPad上,比例在1倍模式下将返回1.0,在2倍模式下将返回2.0——尽管我们知道该设备不包含视网膜显示屏。苹果在iPad的iOS4.2中改变了这一行为:它在1x和2x模式下都返回1.0。你可以自己在模拟器中进行测试。

我在主屏幕上测试了-displayLinkWithTarget:selector:方法,它存在于iOS4中。x而不是iOS3.2,然后检查屏幕的比例:

if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
    ([UIScreen mainScreen].scale == 2.0)) {
  // Retina display
} else {
  // non-Retina display
}

这是对Matt MC的回答的重复。只是UIScreen上的一个类别。

#import "UIScreen+Util.h"

@implementation UIScreen (Util)

+ (BOOL) isRetinaDisplay {
    static BOOL retina = NO;
    static BOOL alreadyChecked = NO;
    if (!alreadyChecked) {
        UIScreen *mainScreen = self.mainScreen;
        if (mainScreen) {
            retina = mainScreen.scale > 1.0;
            alreadyChecked = YES;
        }
    }
    return retina;
}

@end

试试这个

if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
    ([UIScreen mainScreen].scale == 2.0))
{
    // Retina display
    NSLog(@"---------------Retina display");
} else {
    // non-Retina display
    NSLog(@"---------------non-Retina display");
}