【问题标题】:Image Naming for iPhone 5 vs iPhone 4iPhone 5 与 iPhone 4 的图像命名
【发布时间】:2023-04-03 08:18:01
【问题描述】:

我有 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 设为纯蓝色,另一个设为纯红色,这样您就可以看到在哪种情况下正在加载哪个文件。

标签: ios objective-c sprite-kit


【解决方案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

          【讨论】:

            猜你喜欢
            • 2014-11-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多