3 回答

TA貢獻1775條經驗 獲得超8個贊
為了在所有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
}

TA貢獻1821條經驗 獲得超6個贊
這是一個便捷的擴展:
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
}
- 3 回答
- 0 關注
- 513 瀏覽
添加回答
舉報