4

对于所有类型的设备,我都有带有名称的默认初始屏幕: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 的图像。

我需要手动管理吗?我的意思是在识别设备类型后加载适当的图像?

4

4 回答 4

8

在遇到同样的问题后,我发现了这个问题。似乎如果您使用[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"];

于 2012-10-04T16:24:42.907 回答
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
}
于 2012-09-27T10:32:11.327 回答
1

编辑:检查这个这个

你如何使用这条线来提供启动画面无论你有视网膜还是非视网膜显示器

UIImageView *splashView =[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default.png"]];

应用程序检测设备显示相应地拍摄图像。

如果设备有视网膜显示,那么它会自动采用 Default@2x.png。

于 2012-09-27T08:35:25.280 回答
1

你应该改变这个:

[UIImage imageNamed:@"Default.png"];

[UIImage imageNamed:@"Default"];
于 2012-12-26T23:20:29.240 回答