检测Retina显示屏

226

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

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

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

好奇问一下,当您检测到显示器时,除了显示更大版本的艺术作品之外,您还在做什么? - Michael Behan
4
可能是与如何区分 iPhone4 和 iPhone 3?类似的问题。 - Kendall Helmstetter Gelner
我有一个TTImageView(请参阅Three20框架),我想提供图像的高分辨率URL。 - Pierre Valade
1
这个问题对我也很有用,因为我已经下载了呈现为 UI 的图像,在所有 4 种显示尺寸上都有可用的大小,并且只希望用户下载适当的尺寸。 - Pedro
@mbehan:在我的情况下,我想要自定义单元格分隔符,在视网膜和非视网膜屏幕上都为1像素(就像本机分隔符一样)。将厚度设置为1像素会在视网膜显示器上呈现为2像素(显然)。 - user3099609
不要忘记,在iPhone6和6 Plus上,您需要测试比例“>= 2.0”,而不仅仅是“== 2.0”。 - James
14个回答

1
// .h
UIKIT_EXTERN bool isRetinaDisplay();

// .m
bool isRetinaDisplay()
{
    static bool flag;
#ifdef __BLOCKS__
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
        {
            flag = [[UIScreen mainScreen] scale] > 1.0;
        }
        else
        {
            flag = false;
        }
    });
#else
    static bool onceToken;
    if(onceToken == false)
    {
        onceToken = true;
        if([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
        {
            flag = [[UIScreen mainScreen] scale] > 1.0;
        }
        else
        {
            flag = false;
        }
    }
#endif
    return flag;
}

我认为这是最佳解决方案。 - Nikolay Shubenkov

0

为了简化大多数常见用例,这是primulaveris的修改版本。我使用的是swift 2.2,但这应该无关紧要。

extension UIScreen {
    static var isRetina: Bool {
        return screenScale >= 2.0
    }

    static var isRetinaHD: Bool {
        return screenScale >= 3.0
    }

    static var screenScale:CGFloat {
        return UIScreen.mainScreen().scale
    }
}

然后就像这样简单地使用它们
print(UIScreen.isRetina)
print(UIScreen.isRetinaHD)
print(UIScreen.screenScale)

0

这对我有用

if((UIScreen .mainScreen().scale) < 2.0)
{
    NSLog("no retina");
}
else
{
    NSLog("retina");
}

0

试一下这个

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");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接