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
}
当前回答
这对我很有效
if((UIScreen .mainScreen().scale) < 2.0)
{
NSLog("no retina");
}
else
{
NSLog("retina");
}
其他回答
试试这个
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");
}
为了在所有iOS设备上可靠地检测视网膜显示,你需要检查设备是否运行iOS4+,以及[UIScreen mainScreen]。缩放属性等于2.0。如果scale属性存在,你不能假设设备正在运行iOS4+,因为iPad 3.2也包含这个属性。
在运行iOS3.2的iPad上,比例在1倍模式下将返回1.0,在2倍模式下将返回2.0——尽管我们知道该设备不包含视网膜显示屏。苹果在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
}
只是为了结合@sickp的答案和下面来自@n13的评论,我把它做成了一个UIScreen类别,这似乎工作得很好。检查在您第一次调用它时完成,然后为以后的调用保存。
@interface UIScreen (RetinaCheck)
+ (BOOL)retinaScreen;
@end
static BOOL isRetinaScreen = NO;
static BOOL didRetinaCheck = NO;
@implementation UIScreen (RetinaCheck)
+ (BOOL)retinaScreen
{
if (!didRetinaCheck) {
isRetinaScreen = ([[self mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
([self mainScreen].scale == 2.0));
didRetinaCheck = YES;
}
return isRetinaScreen;
}
@end
可能对某人有用。
+(BOOL)iPhoneRetina{
return ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0))?1:0;
}
这是对Matt MC的回答的重复。只是UIScreen上的一个类别。
#import "UIScreen+Util.h"
@implementation UIScreen (Util)
+ (BOOL) isRetinaDisplay {
static BOOL retina = NO;
static BOOL alreadyChecked = NO;
if (!alreadyChecked) {
UIScreen *mainScreen = self.mainScreen;
if (mainScreen) {
retina = mainScreen.scale > 1.0;
alreadyChecked = YES;
}
}
return retina;
}
@end