如何处理 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 的屏幕尺寸,并使所有内容在所有设备上看起来都一样