【问题标题】:Xcode 6 device-specific asset catalogXcode 6 设备特定资产目录
【发布时间】:2014-11-15 06:36:48
【问题描述】:

我正在尝试为新的 6 和 6+ 设备更新我的应用程序。

我添加了新 iPhone 尺寸(6 和 6+)的启动图像。资产目录中有 6 和 6+ 的条目。没问题。

我还需要添加一些全屏视图叠加图像。我已经在@2x (iPhone 4s) 和 R4 (iPhone 5 5s 5c) 中有这些图像。我已经创建了新分辨率大小的图像,但我不确定如何将它们添加到图像集中。

当我进入资产目录时,我可以在图像集中选择特定设备,我会看到 iPhone、retina-4 和 iPad 的条目。有用于 1x、2x、Retina 4 2x 和 3x 的拖放孔。

我的问题 - 我应该将 iPhone 6 的图像放在哪里?显然 3x 是针对 6 plus 的。我不明白retina-4 井如何同时用于iPhone 5 和iPhone 6,因为屏幕尺寸不同。

我错过了什么?

【问题讨论】:

  • 也许可以为 Xcode 6 及更高版本的问题扩展主题? (请参阅我的答案以了解我建议的原因)

标签: ios iphone xcode asset-catalog


【解决方案1】:

我在这里放一些我对 iPhone 设备所做的观察(也许有人会发现它有帮助):

  1. iPhone 4S - 2x Any/Any 瓷砖
  2. iPhone 5 - 2x 1GB/Any 磁贴
  3. iPhone 5S - 2x 1GB/Any 磁贴
  4. iPhone 6 - 2x 1GB/Any 磁贴
  5. iPhone 6 Plus - 3x 1GB/Any 磁贴

为了实现这一点,我检查了设备 - iPhone,内存 1GB。如您所见,iPhone 5/5S/6 之间的图形没有区别。也许使用Metal 1v2/2v2 的设置可以区分,但这在我看来太疯狂了。 Knowledge reference starts at 10:50

我现在从 WWDC 获得的信息,我们不应该考虑分辨率/设备/设备方向细节,而是关注尺寸等级(除了 6 Plus 之外的 iPhone 相同),但如果有人仍然出于某些原因需要它设备特定的图形并且想要使用资产目录(这很棒)然后在这里你可以得到我目前发现的可用的东西 (Xcode 7)。

【讨论】:

  • 同意你的观点,iPhone 5/5S/6 根本无法区分,这太奇怪了
【解决方案2】:

这真的很烦人。对于特定于设备的设置,我们都希望有一个类似于 LaunchImage Set 中的菜单,不同的占位符用于不同的屏幕尺寸。

【讨论】:

    【解决方案3】:

    刚刚为这个问题找到了一个新的解决方案。使用 Retina 4 图像 2 倍并将全屏图像视图的内容模型设置为缩放纵横比填充将使其在 iPhone 4s 和 iPhone 6 上都能正常工作。

    【讨论】:

    • 这不是一个好的解决方案,因为它会裁剪图像。
    【解决方案4】:

    我相当肯定这是 Xcode 6 中的一个错误。当您从资产目录图像集中加载图像时,无论您是缩放还是标准显示模式,您总是会得到 iPhone 6+ 的 3x 条目。对于 iPhone 6,您将始终在两种模式下获得 2x 条目。对于 iPhone 4s,您还将获得 2x 条目。

    所有这些设备都有不同的缩放比例和纵横比,因此这对于像素精确的图像是不可接受的。我的图片都是全屏的,并且是叠加的,所以在缩放模式下我看到的位置不正确。

    我通过创建两个图像集解决了这个问题:
    1) iPhone 6/6plus 处于标准模式
    3x 条目中的 1242x2208 图像
    2x 条目中的 750x1334

    2) iPhone 6/6Plus 处于缩放模式或 iPhone 5
    3x 条目为 1125x2001
    2x 条目为 640x1136
    R4-2x 条目为 640x1136

    为了完成这项工作,我需要确定该设备是否是新设备之一以及它们是否处于缩放模式。根据这些信息,我从正确的图像集中加载图像。

    这是我用来确定设备是否是缩放/标准模式下的新设备之一的代码:

    UIScreen *screen = [UIScreen mainScreen];
    if (screen.scale == 3 && screen.currentMode.size.width == 1242 ||
        screen.scale == 2 && screen.currentMode.size.width == 750) {
        self.overlay = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"StdImageSet"]];
    } else {
        self.overlay = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ZoomedImageSet"]];
    }
    

    这很难看,我讨厌这样做,因为图像集应该消除这种代码。我还没有看到更好的解决方法,我已经提交了一个雷达 (radar 18463463) 错误。

    【讨论】:

    • 谢谢你。我正在努力理解为什么 6+ 在缩放模式下加载全尺寸图像。
    • 谢谢你。这非常令人沮丧。让我担心的是,Xcode 现在已经针对 iWatch 进行了更新,但没有迹象表明这个错误已得到修复。它必须是一个错误,对吧......?我将其作为一个来报告。希望他们能解决这个问题。
    【解决方案5】:

    我发现这很有帮助:http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions

    似乎 iPhone 6 将使用重新采样的 @2x (iPhone 5) 图像。此外,图像集的属性(实用程序窗格)允许您在“通用”(x1、x2、x3)和“设备特定”图像井之间切换。

    【讨论】:

    • 是的,这是对 6+ 如何扩展的有用解释。但是,我相信这并不能回答我的问题。经过实验,我发现在 Xcode 6.0.1 中,iPhone 6 的图像应该进入 \@2x 很好。我认为这是一个错误,因为现在没有地方可以放置用于 iPhone 4s 的 \@2x 图像(iOS8 仍然支持)此外,图像集中没有地方可以放置用于显示缩放的图像iPhone 6 和 6+ 的模式。
    • @KurtSchwartz,我的立场是正确的。我在发表评论后仔细检查,iPhone 6 确实使用了为 iPhone 4s 设计的 2x 图像 - 而不是来自视网膜 4 2x 的图像。 PaintCode 链接似乎是错误的,而且看起来确实是一个小错误。然而,这并没有太大区别——无论哪种方式,图像都是在 iPhone 6(升级版)和其他型号之间共享的。
    • 我已经为此提交了一份雷达报告。除了缺少 640x960 2x 图像的 drop-well 之外,我认为要在 iPhone 6+ 上以缩放显示模式获得像素精确的图像,Xcode 图像集需要一个额外的 drop-well 用于 1125x2001 3x 图像。对于 6 上的缩放模式图像,我认为当设备处于此模式时,应该自动加载retina-4 2x 图像。我怀疑是加载了 2x 图像。但我没有 6,所以我无法测试。
    • 我认为 PaintCode 链接是正确的,但是 iPhone 6 上的 UIImage 加载机制被破坏了。我刚试过这个,iPhone 6 真的忽略了 Retina 4 资产版本。跨度>
    • 哇,好地方。它使用 4/4S 图像尺寸很疯狂;这一定是一个错误。
    猜你喜欢
    • 1970-01-01
    • 2014-11-05
    • 2016-01-02
    • 2019-12-26
    • 2014-08-18
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 2017-10-27
    相关资源
    最近更新 更多