Xcode 5资产目录:如何以正确的大小自动selectLaunchImage

正如这里所build议的,在Interface Builder中,我已经分配了一个完整大小的图像查看“Image”属性的“LaunchImage.png”参数, 它在运行时由iOS关联

在这里输入图像说明

但在运行时,在任何设备(iPhone,iPad,带/不带视网膜)中,拾取的图像总是640×960像素大小的图像,因此忽略其他大小。

有什么办法让iOS自动在设备和分辨率上select正确的图像?

是的,在XCode 5中有一个更简单的方法。

  1. 点击您的Xcode常规选项卡
  2. 然后在下面滚动查找启动图像。 看到小灰箭头点击
  3. 您现在可以拖放特定设备的启动图像。
  4. 如果您愿意,还可以在iOS6和iOS7设备之间select不同的启动图像。
  5. 正确的启动图像将自动为每个设备和屏幕大小选取。

看这些截图。

在这里输入图像说明在这里输入图像说明在这里输入图像说明

现在,我发现的唯一方法是在代码中手动处理LaunchImage.png:

self.splashImage.contentMode = UIViewContentModeScaleAspectFit; if (IS_IPHONE()) { if (!IS_RETINA) { self.splashImage.image = [UIImage imageNamed:@"LaunchImage.png"]; } else { if (IS_PHONEPOD5()) { self.splashImage.image = [UIImage imageNamed:@"LaunchImage-568h@2x.png"]; } else { self.splashImage.image = [UIImage imageNamed:@"LaunchImage@2x.png"]; } } } else if (IS_IPAD()) { if ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) { if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { if (!IS_RETINA) self.splashImage.image = [UIImage imageNamed:@"LaunchImage-700-Portrait~ipad"]; else self.splashImage.image = [UIImage imageNamed:@"LaunchImage-700-Portrait@2x~ipad"]; } else { if (!IS_RETINA) self.splashImage.image = [UIImage imageNamed:@"LaunchImage-Portrait~ipad"]; else self.splashImage.image = [UIImage imageNamed:@"LaunchImage-Portrait@2x~ipad"]; } } else // landscape { if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { if (!IS_RETINA) self.splashImage.image = [UIImage imageNamed:@"LaunchImage-700-Landscape~ipad"]; else self.splashImage.image = [UIImage imageNamed:@"LaunchImage-700-Landscape@2x~ipad.png"]; } else { if (!IS_RETINA) self.splashImage.image = [UIImage imageNamed:@"LaunchImage-Landscape~ipad"]; else self.splashImage.image = [UIImage imageNamed:@"LaunchImage-Landscape@2x~ipad"]; } } } 

其中IS_IPHONE,IS_RETINA等被macros定义为:

 #define IS_PHONEPOD5() ([UIScreen mainScreen].bounds.size.height == 568.0f && [UIScreen mainScreen].scale == 2.f && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) #define IS_RETINA ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0)) #define IS_IPHONE() (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) #define IS_IPAD() (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) #define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) #define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) #define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) #define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)