我有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游戏。这有什么改变吗?
答案 0 :(得分:3)
不要在名称中添加@2x
。当您使用[UIImage imageNamed:@"image.png"]
访问图像时,将自动选择正确的图像。
试试
if (iPhone_5)
... imageNamed:@"myImageh.png"];
else
... imageNamed:@"myImage.png"];
答案 1 :(得分:3)
编译器没有命名约定来区分iPhone 4和iPhone 5图像(仅限高度差异)。 @2x
只会区分所有iOS设备的视网膜和非视网膜图像。
希望这有帮助。
答案 2 :(得分:1)
只需编写[UIImage imageNamed:@"myImage.png"]
代码,无需添加@2x
。根据设备和屏幕尺寸,它将自动采用正确的。
注意:您必须在捆绑包中添加两个图像(myImage.png & myImage@2x.png
)。否则它不会工作。
答案 3 :(得分:1)
使用新的资产目录功能。创建图像集,然后将设备设置从通用更改为特定于设备。检查iPhone和Retina 4英寸。然后你可以添加三个版本(@ 1x / @ 2x和R4)的图像。然后你可以使用imageNamed:@" Image"并且不必担心屏幕尺寸等的任何检查。系统将为您完成所有操作。
答案 4 :(得分:1)
真正的问题是纹理图集没有正确加载。有关解决方案Sprite Kit Textures Acting Funny
,请参阅此问题答案 5 :(得分:1)
不要使用文件扩展名或" @ 2x"在imageNamed:
中
使用不带扩展名的名称,例如@" image"。
这样它将根据设备加载正确的图像。