Xcode 6特定于设备的资产目录

Kur*_*rtz 31 iphone xcode ios asset-catalog

我正在尝试为新的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加.我不知道视网膜4井如何用于iPhone 5和iPhone 6,因为屏幕尺寸不同.

我错过了什么?

Kur*_*rtz 6

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

所有这些设备都具有不同的缩放比例和宽高比,因此这对于像素精确图像是不可接受的.我的图像都是全屏的,并且是覆盖的,因此在缩放模式下我看到了错误的放置.

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

2)iPhone 6/6Plus处于缩放模式或iPhone 5
1125x2001用于3x入口
640x1136用于2x入口
640x1136用于R4-2x入口

为了使其工作,我需要确定设备是否是新设备之一以及它们是否处于缩放模式.根据此信息,我从正确的图像集加载图像.

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

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"]];
}
Run Code Online (Sandbox Code Playgroud)

这是丑陋的,我讨厌必须这样做,因为图像集应该消除这种代码.我没有看到更好的方法,我已经提交了一个雷达(雷达18463463)错误.


Ant*_*ott 5

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

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

  • 我认为PaintCode链接是正确的,但iPhone 6上的UIImage加载机制已被破坏.我只是试过这个,iPhone 6真的忽略了_Retina 4_资产版本. (3认同)
  • 是的,这是对6+规模如何有用的解释.但是,我认为这不能回答我的问题.经过实验,我发现在Xcode 6.0.1中,iPhone 6的图像应该进入\ @ 2x井.我认为这是一个错误,因为现在没有地方可以放置用于iPhone 4s的\ 2x图像(在iOS8中仍然支持)此外,图像集中没有地方可以放置图像用于显示缩放iPhone 6和6+的模式. (2认同)
  • @KurtSchwartz,我的立场得到了纠正.我在发表评论后进行了双重检查,iPhone 6确实使用了用于iPhone 4s的2x图像 - 而不是视网膜4 2x图像中的2x图像.PaintCode链接似乎是错误的,它看起来像一个小错误.然而,它没有太大的区别 - 无论是iPhone 6(升级版)和另一个模型之间共享图像的方式. (2认同)

小智 5

这真的很烦人.对于特定于设备的设置,我们都期望像LaunchImage Set中的菜单,不同屏幕尺寸的不同占位符.


Jul*_*ról 5

我在这里放置了一些我为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可以区分,但这看起来像是太疯狂了.知识参考从10:50开始

我现在从WWDC得到的是我们应该考虑的不是分辨率/设备/设备方向细节,而是专注于尺寸等级(除了6 Plus外,对于iPhone来说是相同的)但是如果有人仍然因为某些原因需要特定于设备的图形并希望使用资产目录(这很棒)然后在这里你得到我现在可用的(Xcode 7).

  • 同意你的看法,iPhone 5/5S/6无法区分是完全奇怪的 (3认同)