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

Posted

技术标签:

【中文标题】如何处理 iPhone 5 视网膜显示检查?【英文标题】:How to deal with Iphone 5 retina display check? 【发布时间】:2014-05-28 13:04:26 【问题描述】:

在 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?我不知道如何处理这个,我认为这是自动完成的。

【问题讨论】:

我不认为这是正确的,imageNamed 会为适当的像素密度选择正确的图像。 当我在带有视网膜显示器的模拟器上运行时它工作得很好,但是当我在我的 iphone 上运行时,它没有选择正确的图像,它选择了分辨率较低的图像,就像我的 iphone 5没有视网膜显示器。我不确定为什么会这样。谢谢。 如果它可以在 4 英寸模拟器上运行,我建议您在设备上对应用程序进行干净构建,以确保实际复制资源。 图片名称中是否包含文件扩展名(例如[UIImage imageNamed:@"myImage.png"])? 您只需要删除图像文件夹并清理项目,然后再次导入标准 image.png 和 image@2x.png 用于视网膜的图像。设备会根据分辨率自动检测正确的图像。 【参考方案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

【讨论】:

你最好检查一下respondsToSelector:@selector(scale),不是吗?检查您真正感兴趣的选择器。【参考方案2】:

imageNamed 选择了正确的图像。

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

如果您没有进行全新安装,有时图像未正确刷新。

【讨论】:

【参考方案3】:

来自 [UIImage imageNamed:] 的苹果文档

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

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

【讨论】:

谢谢,但我错过了什么?我有两个文件,一个名为 file.png 另一个名为 file@2x.png,我在情节提要中选择了 file.png。模拟器工作正常,它选择了正确的文件,但在我的 iphone 5 上运行时却没有。

以上是关于如何处理 iPhone 5 视网膜显示检查?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone X - 我们应该如何处理表格部分标题上方的空间?它通过内容显示

如何处理 iPhone 4s、5 和 6 的屏幕尺寸,并使所有内容在所有设备上看起来都一样

qgroundcontrolGPS定位失败如何处理

如何处理 UIActionSheet 的转换

iPhone iOS在呈现图表时如何处理Core Data中的时间间隔?

如何处理iphone中的关键事件