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

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

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

在iOS 4和更高版本中,UIImage构造函数可以按如下方式获取图像名称:

[UIImage imageNamed:@"Default"]; 

当我在3.5英寸的视网膜显示器(iPhone)上自动select图像(2)。 如果在非视网膜显示器上select(1)。 这很棒。

我为4英寸视网膜(iPhone 5)启动图像指定了图像3。 有没有一种方法来命名图像(3),所以当我在4英寸的视网膜显示屏上运行,它是用相同的UIImage构造函数返回?

也许这还没有实现,或者我期望太多的便利…我只是试图避免在我的代码中select基于屏幕尺寸的图像的任何条件逻辑。

我也有同样的问题,事实certificate,iPhone 5 / iPod Touch第五代没有这种行为。

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

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

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

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

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

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

没有4“的图像types,唯一不同的是其中包含Default-568h@2x.png ,它被用作iPhone 5的启动图像,并Default-568h@2x.png操作系统你的应用程序支持更长的屏幕不应该是letterboxed。

您必须使用不同的屏幕尺寸处理代码或自动布局。 没有特殊的自动图像types。 它既可以是标准的屏幕图像types,也可以是视网膜图像types,与iOS 4以来一样。

iOS 8中的新API允许您加载指定图像的视网膜版本,以前您必须自己确定文件名称:

 UIImage* retinaImage = [UIImage imageNamed:@"ImageName" inBundle:nil compatibleWithTraitCollection:nil]; NSLog(@"screen scale: %2.2f retinaImage: %@", [UIScreen mainScreen].nativeScale, retinaImage);