我在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]只是不能使用这两个图像,即使它们是独立的......
答案 0 :(得分: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.size
返回iOS 4以后图像的逻辑大小(以点为单位,而不是像素)。因此,无论是否加载视网膜图像,您的测试始终以点数返回屏幕尺寸。如果您想要真正测试正在加载的内容,请使用不同的图像进行视网膜和非视网膜图形处理。
以下是测试项目的更正版本:https://www.dropbox.com/s/ns6ci3b5htkhvi6/AssetsCatalogWrongImageLoad.zip
我在这里做的是将文字“@ 2x”放在视网膜大小的图像上,这样当你在视网膜iPad上运行它时,你实际上可以看到正在使用不同的图像,而不是错误地检查大小图像。
答案 1 :(得分:-2)
使用png时,我发现资产目录存在问题。无论出于什么原因,它与png显示相同的问题,转移到jpeg解决了它。似乎某些文件扩展名可能令人困惑