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 的图像命名的主要内容,如果未能解决你的问题,请参考以下文章