Xcode Image Assets 为 Retina 设备返回错误的图像
Posted
技术标签:
【中文标题】Xcode Image Assets 为 Retina 设备返回错误的图像【英文标题】:Xcode Image Assets return the wrong image for retina devices 【发布时间】:2013-10-15 12:23:03 【问题描述】:我在 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] 只是不适用于这两个图像,即使它们是独立的......
【问题讨论】:
【参考方案1】:资产目录没有任何问题。问题在于您测试图像大小的方式。
查看您的代码
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 上运行它时,您实际上可以看到正在使用不同的图像,而不是错误地检查了图片。
【讨论】:
就是这样!谢谢!我想当@"background@2x" 返回比例为 1 的图像时我感到困惑。【参考方案2】:我在使用 png 时发现资产目录存在问题。无论出于何种原因,它与 png 显示相同的问题,转向 jpeg 解决了它。似乎某些文件扩展名可能会令人困惑
【讨论】:
以上是关于Xcode Image Assets 为 Retina 设备返回错误的图像的主要内容,如果未能解决你的问题,请参考以下文章
XCode images.assets 资产目录切片被忽略,图像仍然失真
从 Xcode Swift 中 Assets.xcassets 中的文件夹访问图像
Rails 4 image-path、image-url 和 assets-url 不再在 SCSS 文件中工作