12

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

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

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

[UIImage imageNamed:@"Default"];

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

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

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

4

3 回答 3

12

我也遇到了同样的问题,结果证明 iPhone 5/iPod Touch 第 5 代没有这种行为。

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

我已使用此方法检查我的应用程序是否在 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 ) 上找到了一个 UIImage 类别,它实现了您正在寻找的内容。它没有对不存在的文件的回退,但您可以自己轻松地实现它。

于 2012-10-04T18:14:45.867 回答
2

没有 4" 图像类型。与其他所有图像唯一不同的是,Default-568h@2x.png它被用作 iPhone 5 的启动图像,并向操作系统发出信号,表明您的应用程序支持更长的屏幕并且不应该被加黑。

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

于 2012-10-04T18:11:09.307 回答
0

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

UIImage* retinaImage = [UIImage imageNamed:@"ImageName" 
    inBundle:nil compatibleWithTraitCollection:nil];

NSLog(@"screen scale: %2.2f retinaImage: %@",
    [UIScreen mainScreen].nativeScale, retinaImage);
于 2016-04-22T03:16:19.710 回答