1

我在 Xcode 5 中有一个图像资产目录和两个图像。 在此处输入图像描述

这是文件夹结构的样子

在此处输入图像描述

这是json文件的内容:

{
  "images" : [
    {
      "idiom" : "ipad",
      "scale" : "1x",
      "filename" : "background.png"
    },
    {
      "idiom" : "ipad",
      "scale" : "2x",
      "filename" : "background@2x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

资产目录是我唯一拥有背景和名为 background.png 的文件的地方。现在每当我做一个

[UIImage imageNamed:@"background"];

在非视网膜 iPad 上,我得到非视网膜版本,在视网膜 iPad 上,我再次得到非视网膜版本。我也将这种技术与我的所有其他资源一起使用,并且它可以正确加载视网膜/非视网膜的正确图像,除了这个。

如果我做

[UIImage imageNamed:@"background@2x"]

它加载图像的视网膜版本,此时我看到的唯一解决方案是检查比例并加载适当的图像,但我真的很喜欢这个工作。

有任何想法吗?

编辑

这是一个示例项目的链接,显示问题 AssetsCatalogWrongImageLoad

编辑 2 似乎与资产目录没有任何关系。[UIImage imageNamed] 只是不适用于这两个图像,即使它们是单独的......

4

2 回答 2

4

资产目录没有任何问题。问题在于您测试图像大小的方式。

查看您的代码

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background"]];
NSLog(@"Image size should be: %@", [[UIScreen mainScreen] scale] == 1 ? @"1136x1024":@"2732x2048");
NSLog(@"Image size is:%@", NSStringFromCGSize(imageView.image.size));

但从imageView.image.sizeiOS 4 开始返回图像的逻辑大小(以点为单位,而不是像素)。因此,无论是否加载视网膜图像,您的测试始终以点为单位返回屏幕大小。如果您想真正测试正在加载的内容,请为视网膜和非视网膜图形使用不同的图像。

这是您的测试项目的更正版本: https ://www.dropbox.com/s/ns6ci3b5htkhvi6/AssetsCatalogWrongImageLoad.zip

我在这里所做的是将文本“@2x”放在视网膜大小的图像上,这样当您在视网膜 iPad 上运行它时,您实际上可以看到正在使用不同的图像,而不是错误地检查图像的大小。

于 2013-10-15T13:57:23.713 回答
-2

使用 png 时,我发现资产目录存在问题。无论出于何种原因,它与 png 显示相同的问题,转向 jpeg 解决了它。似乎某些文件扩展名可能会令人困惑

于 2013-10-15T12:38:26.293 回答