【问题标题】:Xcode 5 Asset Catalog: How to automatically pick LaunchImage at correct sizeXcode 5 资产目录:如何自动选择正确大小的 LaunchImage
【发布时间】:2014-02-21 15:54:15
【问题描述】:

正如here 建议的那样,在Interface Builder 中,我已将“Image”属性的“LaunchImage.png”参数分配给全尺寸图像视图,在运行时由iOS 关联

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

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

【问题讨论】:

    标签: ios xcode5


    【解决方案1】:

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

    1. 单击 Xcode 常规选项卡
    2. 然后向下滚动并查找启动图像。看到灰色的小箭头点击一下
    3. 您现在可以拖放特定设备的启动图像。
    4. 如果您愿意,还可以在 iOS6 和 iOS7 设备之间选择不同的启动图像。
    5. 系统会针对每种设备和屏幕尺寸自动获取正确的启动图像。

    查看这些屏幕截图。

    【讨论】:

    • 谢谢,这已经适用于启动图像功能。现在我需要将启动图像作为背景放在自定义视图中,而不复制放在 assets 文件夹中的图像...
    • 您必须创建两个午餐图像,分别命名为 LaunchImage_iphone.png、LaunchImage_ipad.png。将它们添加到您的项目资源中。确保它们的尺寸适合每个设备,然后通过每个设备的故事板/代码添加它们。这是人的唯一方法。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      相关资源
      最近更新 更多