ios - Xcode Image Assets 为视网膜设备返回错误的图像

标签 ios objective-c xcode xcasset

我在 Xcode 5 中有一个图像资源目录和其中的两个图像。 enter image description here

文件夹结构是这样的

enter image description here

这是 json 文件的内容:

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

Assets 目录是我拥有背景和名为 background.png 的文件的唯一位置。 现在每当我做一个

[UIImage imageNamed:@"background"];

在非 Retina iPad 上我得到了非 Retina 版本,在 Retina iPad 上我又得到了非 Retina 版本。 我也将这种技术与我的所有其他资源一起使用,它正确地为视网膜/非视网膜的所有地方加载正确的图像,除了这个。

如果我这样做

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

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

有什么想法吗?

编辑:

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

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

最佳答案

Assets 目录没有问题。问题在于您测试图像大小的方式。

查看你的代码

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.size 从 iOS 4 开始返回图像的逻辑大小(以磅为单位,而不是像素)。所以你的测试总是以磅为单位返回屏幕大小,无论它是否加载视网膜图像。如果您想真正测试正在加载的内容,请为视网膜和非视网膜图形使用不同的图像。

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

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

关于ios - Xcode Image Assets 为视网膜设备返回错误的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19381166/

相关文章:

ios - NSTimer 在缩放时没有按应有的方式工作

iphone - CLLocationManager 不会将位置发送到 didUpdateLocations 方法

ios - 我如何在 UILabel/UITextView 中放置多点触摸,如 facebook 标题?

ios - Xcode 中的滑动图像

iphone - 关于 AudioQueue : request to trim 0 + 1676 = 1676 frames from buffer containing 1152 frames 的 XCODE AVAudioPlayer 错误

ios - cocoa 中的UIGraphicsBeginContext、UIGraphicsEndImageContext?

ios - 一些 Restkit 方法不可用

ios - iPhone map 路线问题

iphone - NSOperation 和 CoreData 线程

在 indexPath.row 的数组中快速打印元素