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

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

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

当前回答

以上答案的Swift版本,>= 2.0规模,因此它包括iPhone 6+和其他未来的高于retina规模的设备:

 if UIScreen.mainScreen().respondsToSelector(Selector("scale")) && UIScreen.mainScreen().scale >= 2.0 {
    // code executed only on Retina device
}

其他回答

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

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

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

if(IS_RETINA)
{
   // etc..
}

SSToolkit有一个这样做的方法:

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

它的用法如下:

[[UIScreen mainScreen] isRetinaDisplay];

这是一个方便的快速扩展:

Swift v5更新:

extension UIScreen {

    public var isRetina: Bool {
        guard let scale = screenScale else {
            return false
        }
        return scale >= 2.0
    }

    public var isRetinaHD: Bool {
        guard let scale = screenScale else {
            return false
        }
        return scale >= 3.0
    }

    private var screenScale: CGFloat? {
        guard UIScreen.main.responds(to: #selector(getter: scale)) else {
            return nil
        }
        return UIScreen.main.scale
    }
}

用法:

if UIScreen.main.isRetina {
    // Your code
}

原:

extension UIScreen { 
public func isRetina() -> Bool {
    return screenScale() >= 2.0
}

public func isRetinaHD() -> Bool {
    return screenScale() >= 3.0
}

private func screenScale() -> CGFloat? {
    if UIScreen.mainScreen().respondsToSelector(Selector("scale")) {
        return UIScreen.mainScreen().scale
    }
    return nil
    }
}

用法:

if UIScreen.mainScreen().isRetina() {
 // your code
        }

这个代码片段……

    int d = 0; // standard display
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0) {
    d = 1; // is retina display
}

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
    d += 2;
}

将返回…… 0为标准分辨率iPhone/iPod touch, 1为retina iPhone, 2用于标准分辨率的iPad, 3视网膜iPad。

primulaveris's的修改版本,以简化最常见的用例。我用的是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)