2

Xcode 为 1x、2x、4" 2x 和 3x 资产提供了资产桶。我的全屏资产在这种配置下都很不稳定,因为 2x 桶用于 3.5" 和 4.7" 屏幕。目前我有一个 UIImage 类别来内省当前屏幕尺寸,如果设备看起来是 3.5”,则选择“*-3.5”资产。

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

4

3 回答 3

2

自 2014 年 11 月中旬以来,我已经向 Apple 报告了一个关于此的错误,我只是注意到他们将其标记为无价值……这给我的印象是,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) 也不会损失太多质量。

于 2015-02-11T14:48:59.157 回答
0

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

于 2014-10-06T16:09:26.300 回答
0

我有同样的问题,并得到了苹果的确认,我必须为此编写代码。例如,您可以像这样在 iPhone 6 上使用资产目录尝试全屏图像

但实际上我懒得用一个 2x 用于 4" & 4.7" 屏幕,另一个 2x 用于 3.5" 屏幕

于 2015-11-26T02:40:50.110 回答