iOS SDK是否提供了一种简单的方法来检查currentDevice是否具有高分辨率的显示器(retina) ?
我现在发现的最好的方法是:
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {
// RETINA DISPLAY
}
iOS SDK是否提供了一种简单的方法来检查currentDevice是否具有高分辨率的显示器(retina) ?
我现在发现的最好的方法是:
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {
// RETINA DISPLAY
}
当前回答
+(BOOL)iPhoneRetina{
return ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0))?1:0;
}
其他回答
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)
@sickp的答案是正确的。为了简化操作,将这一行添加到共享中。pch文件:
#define IS_RETINA ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale >= 2.0))
然后在任何文件中你都可以这样做:
if(IS_RETINA)
{
// etc..
}
比较浮点值是否相等总是让人感觉有点不可靠。 两者我都喜欢
[UIScreen mainScreen].scale > 1.0;
or
[UIScreen mainScreen].scale < 2.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");
}
这个代码片段……
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。