UIImage imageNamed:不会自动选择视网膜@ 2x图像

Joe*_*elF 12 ios retina-display ios6

假设我在捆绑或资产目录中有三个图像:

  1. 默认〜iphone.png
  2. Default@2x~iphone.png
  3. Default-568h@2x.png

在iOS 4及更高版本中,UIImage构造函数可以采用如下图像名称:

[UIImage imageNamed:@"Default"];
Run Code Online (Sandbox Code Playgroud)

当我使用3.5英寸视网膜显示器(iphone)时,它会自动选择图像(2).如果在非视网膜显示器上,则选择(1).这很棒.

我将图像命名为4英寸视网膜(iPhone 5)启动图像.有没有办法命名图像(3),所以当我在4英寸视网膜显示器上运行时,它返回与相同的UIImage构造函数?

也许这还没有实现,或者我对方便性的期望过高......我只是试图避免代码中的任何条件逻辑来根据屏幕尺寸选择图像.

Bjö*_*ser 12

我也遇到了同样的问题,结果发现iPhone 5/iPod Touch第五代没有这种行为.

您必须手动确定您的应用程序是否在此类设备上运行并相应地更改文件名.

我用这种方法来检查我的应用程序是否在iPhone 5/iPod Touch第五代上运行:

#define IS_PHONEPOD5() ([UIScreen mainScreen].bounds.size.height == 568.0f && [UIScreen mainScreen].scale == 2.f && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样调整图像名称:

if(IS_PHONEPOD5()) {
   myImageView.image = [UIImage imageNamed:@"MyImage-568h.png"];
} else {
   myImageView.image = [UIImage imageNamed:@"MyImage.png"];
}
Run Code Online (Sandbox Code Playgroud)

更新
我还在github(Link)上找到了一个UIImage类,它实现了你正在寻找的东西.它没有非现有文件的后备,但您可以自己轻松实现它.