如何处理Iphone 5视网膜显示屏检查?

时间:2014-05-28 13:04:27

标签: ios iphone objective-c uiimage retina-display

在Iphone 5中运行应用程序时,我发现[UIImage imageNamed]在iphone或ipod 5中没有检测到视网膜显示。我的应用程序,标准版和视网膜中的所有内容都有2张图像一个名为@ 2x。现在,我曾经在故事板或编程中选择常规图像,因为我认为它会自动获得正确的图像,就像模拟器一样,但事实证明,Iphone 5没有。因此,根据我的理解,我必须使用代码手动检查是否是视网膜:

if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
        ([UIScreen mainScreen].scale == 2.0)) {
        // Retina display
        NSLog(@"RETINA");
    } else {
        // non-Retina display
        NSLog(@"NON-RETINA");
    }

现在,由于我将大量使用此代码,有没有办法避免重复它?也许创建一个协议,甚至子类化UIImage?我不知道如何处理这个问题,我认为这是自动完成的。

3 个答案:

答案 0 :(得分:1)

如果模拟器看到视网膜图像并且您的设备不是可能存在区分大小写的问题。模拟器并不关心,但实际设备却如此。使用和不使用@ 2x检查图像的名称,以了解大写和小写的差异。

如果这不能解决您的问题(这可能非常奇怪),您可以通过将此方法添加到您的.m文件来自动执行该方法:

-(BOOL)retinaScreenResolution {
if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
    ([UIScreen mainScreen].scale == 2.0))
    return YES;
else
    return NO;

并在代码中的任意位置调用:

if ([self retinaScreenResolution]) {
    //YES retina
}
else {
    //NO
}

答案 1 :(得分:1)

imageNamed选择正确的图像。

请尝试从手机上卸载您的应用,然后在iphone 5上再次运行之前清理并构建项目。

有时会发生图像未正确刷新的情况,如果您没有进行干净安装。

答案 2 :(得分:0)

来自[UIImage imageNamed:]

的苹果文档
  

如果屏幕的比例为2.0,   此方法首先搜索具有相同文件名的图像文件   附加一个@ 2x后缀。例如,如果文件的名称是   按钮,它首先搜索按钮@ 2x。如果找到2x,则加载   该图像并设置返回的UIImage对象的scale属性   到2.0。否则,它会加载未修改的文件名并设置比例   属性为1.0。

所以根据文档你的假设是错误的