猿问

检测视网膜显示

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


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


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

         // RETINA DISPLAY

    }


牧羊人nacy
浏览 455回答 3
3回答

阿晨1998

为了在所有iOS设备上可靠地检测Retina显示屏,您需要检查设备是否正在运行iOS4 +,以及该[UIScreen mainScreen].scale属性是否等于2.0。如果该scale属性存在,则不能假定设备正在运行iOS4 + ,因为iPad 3.2也包含此属性。在运行iOS3.2的iPad上,scale将在1x模式下返回1.0,在2x模式下返回2.0-即使我们知道该设备不包含Retina显示屏。苹果在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}

凤凰求蛊

这是一个便捷的扩展: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 >= 2.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        }
随时随地看视频慕课网APP

相关分类

iOS
我要回答