8

我正在使用 iOS 5.1 开发应用程序,但我在使用 default.png 文件时遇到了一些奇怪的行为。

我已将以下文件添加到我的应用程序中:

Default.png - (iPhone)

Default@2x.ping - (iPhone Retina)

Default-Portrait~ipad.png - (iPad)

Default-Portrait@2x~ipad.png -(iPad Retina)

当应用程序启动时,它似乎为每个场合选择了正确的 Default.png 图像。但是,在我的 AppDelegate 中,我有一个简单的闪屏,可以使应用程序的加载和到应用程序的过渡更加顺畅,执行以下操作:

UIImageView *splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,window.frame.size.width, window.frame.size.height)]; 
splashView.image = [UIImage imageNamed:@"Default"]; 
    
[window addSubview:splashView]; 
[window bringSubviewToFront:splashView]; 

然而[UIImage imageNamed:@"Default"],反过来并没有为每个设备选择正确的文件,我相信问题-Portrait出在文件名的一部分。

所以作为一个快速的解决方案,我这样做了:

if( ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) ) {
    // Force the image used by ipads
    if( [[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0) {
       splashView.image = [UIImage imageNamed:@"Default-Portrait@2x~ipad"];
    }
    else {
        splashView.image = [UIImage imageNamed:@"Default-Portrait~ipad"];
    }
}
else
   splashView.image = [UIImage imageNamed:@"Default"];

这是我应该这样做的吗?你觉得这很有趣吗?

4

3 回答 3

4

有关官方信息,请查看:App-Related Resources

对于启动图像,请使用以下格式:

<basename><orientation_modifier><scale_modifier><device_modifier>.png

看起来你最好使用:

Default.png - (iPad)

Default@2x.png - (iPad Retina)

Default~iphone.png - (iPhone)

Default@2x~iphone.png -(iPhone Retina)

即使简单地使用,这也应该为您提供正确的图像:

splashView.image = [UIImage imageNamed:@"Default"]; 
于 2012-04-12T12:14:56.640 回答
2

一旦我的通用应用程序完成加载,我会在 a 中显示启动屏幕的副本,UIImageView然后将其淡出,以便在启动和应用程序准备就绪之间进行温和的过渡。这是我用来确定要使用哪个图像的代码:

    // choose the correct launch image for orientation, device and scale
    NSMutableString *launchImageName = [[NSMutableString alloc] initWithString:@"Default"];
    BOOL isPad = ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad );
    if( isPad )
    {
        BOOL isLandscape = UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]);
        NSString *imageOrientation = (isLandscape) ? @"Landscape" : @"Portrait";

        BOOL isRetina = ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0);
        NSString *scaleString = (isRetina) ? @"@2x" : @"";

        // Default-Landscape~ipad.png
        // Default-Landscape@2x~ipad.png
        // Default-Portrait~ipad.png
        // Default-Portrait@2x~ipad.png
        launchImageName = [NSMutableString stringWithFormat:@"%@-%@%@~ipad.png", launchImageName, imageOrientation, scaleString ];

    } else {

        if( CGRectGetHeight(self.view.frame) > 480.f)
        {
            // Default-568h.png
            launchImageName = [NSMutableString stringWithFormat:@"%@-568h.png", launchImageName];
        } else {
            // Default.png
            // Default@2x.png
            launchImageName = [NSMutableString stringWithFormat:@"%@.png", launchImageName];
        }
    }
    UIImage *launchImage = [UIImage imageNamed:launchImageName];
于 2013-04-25T20:30:28.237 回答
0

http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/App-RelatedResources/App-RelatedResources.html

应用启动(默认)图像
<basename><usage_specific_modifiers><scale_modifier><device_modifier>.png

为不同方向提供启动图像
<basename><orientation_modifier><scale_modifier><device_modifier>.png

为自定义 URL 方案提供启动图像
<basename>-<url_scheme><scale_modifier><device_modifier>.png
于 2012-05-13T19:04:56.667 回答