iPhone 5 与 iPhone 4 的图像命名

Posted

技术标签:

【中文标题】iPhone 5 与 iPhone 4 的图像命名【英文标题】:Image Naming for iPhone 5 vs iPhone 4 【发布时间】:2014-03-21 05:25:42 【问题描述】:

我有 iPhone 5 和 iPhone 4 的视网膜图像。唯一的区别是图像的高度,分辨率是相同的。

当我指定 iPhone 4 图像时,我执行 myImage@2x.png,而对于 iPhone 5,我执行 myImageh@2x.png

然后在代码中

if (iPhone_5)
       ... imageNamed:@"myImageh@2x.png"];
else
       ... imageNamed:@"myImage@2x.png"];

问题:这在 ios 模拟器上效果很好,但是在我的实际 iPhone 5 上,图像被放大到两倍大小。当我做if (iphone_5) ... imageNamed:@"myImage.png"] 时,它在真正的 iPhone 5 上运行良好,但模拟器抱怨它找不到图像文件。

这样做的正确方法是什么?

编辑:我忘了说我的图像在纹理图集中,因为这是用于 spritekit 游戏的。这有什么改变吗?

【问题讨论】:

我相信你应该在你的代码中使用 myImage.png (没有@2x)。这在过去对我有用。您是否尝试过更改 iPhone 模拟器的大小?也许要做一个测试,将@2x 设为纯蓝色,另一个设为纯红色,这样您就可以看到在哪种情况下正在加载哪个文件。 【参考方案1】:

不要在名称中添加@2x。当您使用[UIImage imageNamed:@"image.png"] 访问您的图像时,将自动选择正确的图像。

试试吧

if (iPhone_5)
       ... imageNamed:@"myImageh.png"];
else
       ... imageNamed:@"myImage.png"];

【讨论】:

如果你的图片扩展名是png,你可以使用[UIImage imageNamed:@"myImage"] @RahulPatel 我的图像也在纹理图集中。这有什么改变吗? @Auser 什么都不会改变。虽然您没有添加@2x,但对于ratina 设备,操作系统会自动加载@2x 图像。所以一切都会好起来的【参考方案2】:

编译器没有命名约定来区分 iPhone 4 和 iPhone 5 图像(仅高度不同)。 @2x 只会区分所有 iOS 设备的视网膜和非视网膜图像。

希望这会有所帮助。

【讨论】:

【参考方案3】:

永远不要在imageNamed:中使用文件扩展名或“@2x” 使用不带扩展名的名称,例如 @"image"。 这样它将根据设备加载正确的图像。

【讨论】:

【参考方案4】:

编码为[UIImage imageNamed:@"myImage.png"],无需添加@2x。根据设备和屏幕尺寸,它会自动选择正确的。

注意:您必须在捆绑包中添加两个图像(myImage.png & myImage@2x.png)。否则就不行了。

【讨论】:

【参考方案5】:

使用新的资产目录功能。创建一个图像集,然后将设备设置从通用更改为设备特定。勾选 iPhone 和 Retina 4 英寸。然后您可以添加图像的三个版本(@1x/@2x 和 R4)。然后你可以只使用 imageNamed:@"Image" 而不必担心屏幕大小等任何检查。系统会为你做这一切。

【讨论】:

【参考方案6】:

真正的问题是纹理图集没有正确加载。请参阅此问题以获取解决方案Sprite Kit Textures Acting Funny

【讨论】:

以上是关于iPhone 5 与 iPhone 4 的图像命名的主要内容,如果未能解决你的问题,请参考以下文章

图像超过 iPhone 5 上的整个屏幕

在情节提要中更改 iphone 4 和 iphone 5 之间的背景图像?

iPhone 5 的新图像名称

iPhone - 多个目标多个启动图像的噩梦

iPhone 模拟器不显示 iphone 5 兼容图像

iphone OS 4.0-显示更高分辨率图像的问题