我正在使用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"];
我应该这样做吗?这看起来很有趣吗?
答案 0 :(得分: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"];
答案 1 :(得分:2)
我的通用应用程序加载完成后,我会在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];
答案 2 :(得分:0)
App Launch (Default) Images <basename><usage_specific_modifiers><scale_modifier><device_modifier>.png Providing Launch Images for Different Orientations <basename><orientation_modifier><scale_modifier><device_modifier>.png Providing Launch Images for Custom URL Schemes <basename>-<url_scheme><scale_modifier><device_modifier>.png