Xcode资产目录支持3.5“,4”和4.7“@ 2x图像?

时间:2014-10-06 15:37:46

标签: ios xcode iphone-6 asset-catalog

Xcode为1x,2x,4“2x和3x资产提供资产存储桶。我的全屏资产在这种配置下都很不稳定,因为2x存储桶用于3.5”和4.7“屏幕。目前我有一个UIImage类别它会检查当前屏幕大小,如果设备看起来像是3.5英寸,则选择“* -3.5”资产。

这很笨重而且不酷。看到Xcode满足其LaunchImage资产的所有不同设备大小,我希望有一些方法可以为非启动图像资产提供特定于设备的资产,而无需借助代码。

3 个答案:

答案 0 :(得分:2)

自2014年11月中旬以来,我已经向Apple报告了一个关于此问题的错误,我刚注意到它们将其标记为No Value ...这让我觉得Apple已故意为iPhone 6省略了一个额外的插槽。我猜他们现在想要将2x插槽用于iPhone 6,也许他们正在减少对iPhone 4s的支持,因为它已经老了。

如果你真的想继续支持iPhone 4s,我建议在2x插槽中使用iPhone 6尺寸的图像,然后使用以下方法加载你的图像:

+(UIImage *)loadImageNamed:(NSString *)imageName
{
    CGSize screenSize = [UIScreen mainScreen].bounds.size;
    CGFloat screenHeight = MAX(screenSize.width, screenSize.height);
    CGFloat const IPHONE_4_SCREEN_HEIGHT = 480;
    UIImage *image = [UIImage imageNamed:imageName];
    if(screenHeight == IPHONE_4_SCREEN_HEIGHT) {
        CGFloat const xScale = .85333333;//x conversion ratio from iPhone 6's 375 pts width screen to iPhone 4's 320 pts width screen
        CGFloat const yScale = .71964018;//y conversion ratio from iPhone 6's 667 pts height screen to iPhone 4's 480 pts height screen
        CGSize newSize = CGSizeMake(xScale * image.size.width, yScale * image.size.height);
        UIGraphicsBeginImageContextWithOptions(newSize, NO, 0);

        [image drawInRect:(CGRect){0, 0, newSize}];
        UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return resizedImage;
    }
    return image;
}

将大图像(iPhone 6)调整为较小的图像(iPhone 4)即使纵横比不同,也不会损失太多质量。

答案 1 :(得分:0)

在迁移到Xcode 6和iOS 8时使用现有项目会产生一些初始问题。我通过将图片集从Device specific更改为Universal来解决了这个问题。这将删除R4图像选项,并为您留下@1x@2x@3x。如果您使用例如需要适合屏幕的背景图像,那么我建议您找到一个不必100%完美的图像以使其看起来很好,并将图像设置为Aspect Fill。< / p>

答案 2 :(得分:0)

我有same problem并且得到了苹果的确认,我必须为此编写代码。例如,您可以尝试这样Fullscreen images on iPhone 6 with Asset Catalogs

但实际上我通过使用一个2x用于4“和4.7”屏幕以及另一个2x用于3.5“屏幕来实现它的懒惰