比方说,我有一个包或资产目录三个图像:
- 默认〜iphone.png
- Default@2x~iphone.png
- Default-568h@2x.png
在iOS 4及更高版本,如下UIImage的构造可以采用图像名称:
[UIImage imageNamed:@"Default"];
当我3.5英寸视网膜显示器(iphone)就可以自动选择图像(2)。 如果在非视网膜显示它选择(1)。 这很棒。
作为用于4英寸视网膜(iPhone 5)发射的图像指定的I命名的图像3。 有没有一种方法来命名的图像(3),这样,当我是一个4英寸的视网膜显示器上运行,它与同一UIImage的构造函数返回?
也许这还没有实现,或者我期望从方便太多了......我只是想避免在我的代码挑根据屏幕尺寸图像的任何条件逻辑。
我也有过同样的问题,事实证明,没有为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上(一个UIImage类的链接 ),它实现你在找什么。 它没有对不存在的文件回退,但你可以自己轻松地实现它。
有没有4"的图像类型。这是一切唯一不同的是列入Default-568h@2x.png
它被用作启动图像为iPhone 5,并通知您的应用程序支持更长的屏幕的OS并且不应该被边框化。
你必须处理的代码或用不同的屏幕大小自动版式。 有没有什么特别的,自动图像类型。 这是一个标准的屏幕图像类型或视网膜图像类型,因为它是自iOS 4的相同。
在iOS的8个新API允许您加载一个名为图像的视网膜版本,以前你必须自己确定的文件名:
UIImage* retinaImage = [UIImage imageNamed:@"ImageName"
inBundle:nil compatibleWithTraitCollection:nil];
NSLog(@"screen scale: %2.2f retinaImage: %@",
[UIScreen mainScreen].nativeScale, retinaImage);