假设我在捆绑或资产目录中有三张图片:
在iOS 4及更高版本中,UIImage构造函数可以采用如下图像名称:
[UIImage imageNamed:@"Default"];
当我使用3.5英寸视网膜显示器(iphone)时,它会自动选择图像(2)。如果在非视网膜显示器上,则选择(1)。这很棒。
我将图像命名为4英寸视网膜(iPhone 5)启动图像。有没有办法命名图像(3),所以当我在4英寸视网膜显示器上运行时,它会返回相同的UIImage构造函数?
也许这还没有实现,或者我对方便性的期望过高......我只是试图避免代码中的任何条件逻辑根据屏幕尺寸选择图像。
答案 0 :(得分: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)
然后您可以像这样调整图像名称:
if(IS_PHONEPOD5()) {
myImageView.image = [UIImage imageNamed:@"MyImage-568h.png"];
} else {
myImageView.image = [UIImage imageNamed:@"MyImage.png"];
}
<强>更新强>
我还在github(Link)上找到了一个UIImage类,它实现了你正在寻找的东西。它没有非现有文件的后备,但您可以自己轻松实现它。
答案 1 :(得分:2)
没有4“图像类型。唯一与其他一切不同的是包含Default-568h@2x.png
,它被用作iPhone 5的启动图像,并向应用程序支持的操作系统发出更长的信号屏幕,不应该是letterboxed。
您必须使用不同的屏幕尺寸处理代码或自动布局。没有特殊的自动图像类型。它既可以是标准的屏幕图像类型,也可以是视网膜图像类型,与iOS 4相同。
答案 2 :(得分:0)
iOS 8中的新API允许您加载指定图像的视网膜版本,之前您必须自己确定文件名:
UIImage* retinaImage = [UIImage imageNamed:@"ImageName"
inBundle:nil compatibleWithTraitCollection:nil];
NSLog(@"screen scale: %2.2f retinaImage: %@",
[UIScreen mainScreen].nativeScale, retinaImage);