【问题标题】:xcode 6 asset catalog iphone 6xcode 6 资产目录 iphone 6
【发布时间】:2015-02-25 13:26:13
【问题描述】:

这个问题还没有解决。使用资产目录、设备特定(非通用)时,选项为 1x、2x、r 2x、3x。 1x 是不必要的,因为它不是视网膜。 2x 适合 ip4,分辨率为 640x960。 r 2x 适合 ip5,分辨率为 640x1136。 3x 是 ip6plus 井,分辨率为 1242x2208。

现在,当我为 ip6(不是 ip6plus!)运行模拟器时,它使用 2x 图像(ip4 为 640x960 res),而且它也没有放大以填充屏幕(无论如何这都没有意义,因为比率不不适合)。

有没有人找到合适的指南来为新手机设置背景图片?我的意思不是解释各种 res 大小是如何缩放的,这很清楚,但是如何解决共享 ip4 和 ip6 的 xcassets 图像以及@2x 之间的明显不匹配?谢谢!

编辑:Xcode asset catalog support for 3.5", 4", and 4.7" @2x images? 类似的问题,但没有真正解决,只是使用通用而不是设备特定的解决方法。有人知道更好的方法吗?

【问题讨论】:

  • 很抱歉,老兄已经回答了很多次了,这里应该可以帮助到stackoverflow.com/questions/25755443/…
  • 是的,我知道缩放比例,但这不是我的问题。
  • 我不明白您的问题,然后根据您提出的内容和已经给出的答案,似乎该问题的答案应该为您提供您想要的。如果不是,请提供更多信息,以便我们提供更好的答案。
  • 分辨率缩放清晰,启动图像在资产目录中工作正常,但使用相同的原理并根据设备将图像添加到各自的井 1x、2x、r 2x、3x,并使用适当的缩放,仍然没有回答如何为 ip6 加载 750x1334 图像。模拟器将 2x 井中的 640x960 图像用作 ip6 的背景,这是错误的图像,没有炸毁。
  • 哦,好吧,我想我现在明白了。老实说,您的问题还不够清楚。也许最好改写你的问题?

标签: ios iphone xcode


【解决方案1】:

自 2014 年 11 月中旬以来,我已向 Apple 报告了一个关于此的错误,我只是注意到他们将其标记为无价值……这让我觉得 Apple 故意省略了 iPhone 6 的额外插槽。我的猜测是他们现在希望 2x 插槽用于 iPhone 6,也许他们正在减少对 iPhone 4s 的支持,因为它已经变老了。

如果你真的想继续支持 iPhone 4s,我建议在 2x slot 中使用 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 4s) 也不会损失太多质量。


编辑:

这是 Apple 关系对我的错误报告的答复:

没有计划根据以下情况解决此问题:

我们在 IB 中引入了尺寸等级。因此,我们希望开发人员使用 带有图像视图的 XIB,用于控制图像的加载方式和 显示。如果他们绝对必须提供像素 所有可能的屏幕尺寸的完美图像,然后他们需要做 类似于您的建议并确定具体资源 加载自己。

我们现在关闭此报告。

如果您对解决方案有疑问,或者如果这仍然是 对您来说至关重要的问题,那么请更新您的错误报告 信息。

请务必定期检查新的 Apple 版本是否有任何更新 这可能会影响这个问题。

【讨论】:

    【解决方案2】:

    添加 640*1136 的图像,因为 ip6 与 ip5 而不是 ip4 成比例,对于 iphone 6 有 @3x 也可以选择

    【讨论】:

    • 但@3x 是针对 ip6+,而不是 ip6。
    【解决方案3】:

    您不能将@2x 图片添加到您的资产中,并希望它适合您的所有尺寸。例如的背景。 iP4 和 iP5 只是不同,因此您必须使用 2 个资产 regular/@2x 用于 iP4 和 regular/@2/@3 用于 iP5/6,因为它们具有相同的比率(通用情况)。

    其他方式设置为@2xR4,但没有像@2x@2x retina 这样的方式,因为它是相同的。

    【讨论】:

    • 是的,我试过了,但 ip6 的模拟器总是采用 2x 图像,而不是视网膜 2x 作为 ip5。
    • 我不知道您的代码在哪里指定了背景。还有“总是拍摄 2x 图像,而不是视网膜 2x”这句话是什么意思......
    • 使用 xcassets 目录,我使用以下选项指定不同设备的视图:设备特定。这给了我 4 个井:1x、2x、视网膜 2x 和 3x。我们可以省略 1x,2x 用于 ip4 (640x960),retina 2x 用于 ip5 (640x1136),3x 用于 ip6+。现在我的模拟器使用 2x 图像来显示 ip6,而我需要将视网膜 2x 图像放大以适应 ip6。
    • 您似乎对 @2x 感到有些困惑。 2x 和retina2x 没有任何意义。 @2x 用于视网膜显示器(iP4 也是视网膜)
    • 我知道,但这是苹果的规范,这就是他们希望使用资产目录的方式,除非您知道另一种方式。这是针对特定设备(1x、2x、r 2x、3x)和通用(仅 1x、2x、3x)的设置之间的区别。
    猜你喜欢
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 2014-12-29
    • 1970-01-01
    相关资源
    最近更新 更多