我有名称的默认启动画面: 所有类型的设备的Default-568h @ 2x.png,Default-Portrait.png,Default.png,Default @ 2x.png等等。
我知道系统会自动为特定设备选择合适的启动画面并显示它。
问题:是否可以知道系统选择了哪个图像?如何将系统选择的适当图像加载到UIimageView。
我试过了:
UIImageView *splashView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight)];
splashView.image=[UIImage imageNamed:@"Default.png"];
但它只为所有类型的设备(iPhone 4,5,iPad)加载名称为Default.png的图像。
我需要手动管理吗?我的意思是在识别设备类型后加载适当的图像?
答案 0 :(得分:9)
在遇到同样的问题后我发现了这个问题。似乎如果您使用[UIImage imagedNamed:@"Default"];
iOS将检测视网膜与非视网膜并应用@2x
但它不会检测iPhone 5并应用-568h
我想出的解决方案是在UIImage上写一个类别来检查主窗口的高度,如果存在,则返回相应的图像:
@interface UIImage (Compatible)
+ (UIImage *)compatibleImageNamed:(NSString *)name;
@end
@implementation UIImage (Compatible)
+ (UIImage *)compatibleImageNamed:(NSString *)name {
if ([[UIScreen mainScreen] bounds].size.height==568.0){
NSString *extension = [name pathExtension];
NSString *iPhone5Name = [[name stringByDeletingPathExtension] stringByAppendingString:@"-568h"];
if (extension.length!=0)
iPhone5Name = [iPhone5Name stringByAppendingPathExtension:extension];
UIImage *image = [UIImage imageNamed:iPhone5Name];
if (image)
return image;
}
return [UIImage imageNamed:name];
}
@end
然后,无论我知道哪里,我想加载一张同时拥有iPhone 5版本的图像:
[UIImage compatibleImageNamed:@"MyImage"];
答案 1 :(得分:3)
我手动完成所有启动画面:
CGRect screenRect = [[UIScreen mainScreen] bounds];
float screenWidth = screenRect.size.width;
float screenHeight = screenRect.size.height;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
splashView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight)];
if (screenHeight==568.0) {
splashView.image=[UIImage imageNamed:@"Default-568h@2x.png"];//iPhone 5
}else{
splashView.image=[UIImage imageNamed:@"Default.png"]; //other iPhones
}
} else {
splashView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 20, screenWidth, screenHeight-20)];
splashView.image=[UIImage imageNamed:@"Default-Portrait.png"];// iPads
}
答案 2 :(得分:1)
U如何使用此线提供启动画面,无论您是否有视网膜或非视网膜显示
UIImageView *splashView =[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default.png"]];
应用程序检测到设备显示会相应地拍摄图像。
如果设备有视网膜显示,则自动接受Default@2x.png。
答案 3 :(得分:1)
你应该改变这个:
[UIImage imageNamed:@"Default.png"];
到
[UIImage imageNamed:@"Default"];