我正在尝试为新的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,因为屏幕尺寸不同。
我错过了什么?
答案 0 :(得分:6)
我非常确定这是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
1125x2001为3x入口
640x1136为2x入口
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"]];
}
这很丑陋,我讨厌必须这样做,因为图像集应该消除这种代码。我没有看到更好的解决方法,而且我已经提交了雷达(雷达18463463)错误。
答案 1 :(得分:5)
我发现这有用:http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions
似乎iPhone 6将使用重新采样的@ 2x(iPhone 5)图像。此外,图像集的属性(实用程序窗格)可让您在“通用”按钮之间切换。 (x1,x2,x3)和'特定于设备的'图像井。
答案 2 :(得分:5)
这真烦人。对于特定于设备的设置,我们都希望像LaunchImage Set中的菜单,不同屏幕尺寸的不同占位符。
答案 3 :(得分:5)
我在这里放置了一些我为iPhone设备做过的观察(也许有人会发现它有用):
2x Any/Any
tile 2x 1GB/Any
tile 2x 1GB/Any
tile 2x 1GB/Any
tile 3x 1GB/Any
tile 为了达到这个目的,我检查了设备 - iPhone,内存1GB。如您所见,iPhone 5/5S/6
之间的图形没有区别。也许玩Metal 1v2/2v2
的设置可以区分,但这对我来说太疯了。 Knowledge reference starts at 10:50
我现在从WWDC得到的东西我们应该考虑不是分辨率/设备/设备方向细节,而是专注于尺寸等级(除了6 Plus外,对于iPhone来说是相同的)但是如果有人因某些原因仍然需要设备特定的图形,并希望使用资产目录(这是伟大的)然后在这里你得到我现在可用的(Xcode 7
)。
答案 4 :(得分:1)
刚刚为此问题找到了新的解决方案。使用视网膜4图像2倍并设置全屏图像视图的内容模型以扩展方面填充将使其在iPhone 4和iPhone 6上都能正常工作。