2013-10-15 32 views
1

我在Xcode 5中有一个图像资产目录和两个图像。 enter image description hereXcode图像资产返回视网膜设备的错误图像

这是文件夹结构是什么样子

enter image description here

这是JSON文件的内容:

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

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

[UIImage imageNamed:@"background"]; 

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

如果我做

[UIImage imageNamed:@"[email protected]"] 

它加载图像,我看到的是只检查的规模和加载相应的图像唯一的解决办法,并在这一点上,视网膜版本,但我真的很喜欢这工作。

任何想法?

编辑

下面是一个示例项目的链接时,显示问题 AssetsCatalogWrongImageLoad

编辑2 好像它没有任何与该资产类别。 [UIImage imageNamed]只是不能与这两个图像,即使他们是在自己的...

回答

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的你其实可以看到正在使用不同的图像,而不是错误地检查图像的大小。

+0

就是这样!谢谢!我想我在@“background @ 2x”以1的比例返回图像时感到困惑。 – Andrew

-2

我使用png时看到资产目录的问题。无论出于什么原因,它显示与png相同的问题,移动到JPEG解决它。看起来有些文件扩展名可能令人困惑