我相当肯定这是 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 条目
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"]];
}
这很难看,我讨厌这样做,因为图像集应该消除这种代码。我还没有看到更好的解决方法,并且我已经提交了一个雷达 (radar 18463463) 错误。