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

时间:2014-01-29 17:13:07

标签: ios xcode5

根据建议here,在Interface Builder中我已分配到完整大小的图像查看“Image”属性的“LaunchImage.png”参数,在运行时由iOS关联

enter image description here

但在运行时,在任何设备(iPhone,iPad,有/无视网膜)中,所选图像始终是640×960像素大小的图像,因此忽略了其他尺寸。

有没有办法让iOS自动在设备和分辨率上选择正确的图像?

2 个答案:

答案 0 :(得分:1)

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

  1. 点击您的Xcode常规选项卡
  2. 然后在下面滚动并查找启动图像。看到小灰色箭头点击
  3. 您现在可以拖放特定设备的启动图像。
  4. 您还可以在iOS6和iOS之间选择不同的启动图像。 iOS7设备,如果您这样选择。
  5. 将自动为每个设备和屏幕尺寸拾取正确的启动图像。
  6. 请参阅这些屏幕截图。

    enter image description here enter image description here enter image description here

答案 1 :(得分:1)

目前,我发现的唯一方法是在代码中手动处理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等宏定义为:

#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)