xcode - 资产目录 - 图片类型 - 相同比例 - 不同分辨率

xcode - asset catalog - image type - same scale - different resolutions

我有一个 iOS 应用程序,它是几年前开发的,使用 images.xcassets 目录设置许多控件的背景。使用 contents.json 设置图像,其中目标是 iPhone,iPad 使用 'idiom' 键。进一步的规范包括 'scale' 和 'filename'。似乎此应用在 iOS 8.

之前运行良好

截至今天,有许多 iPhone、iPad 的高分辨率设备。因此,我需要添加更多针对这些高分辨率屏幕设备的图像。

不知道之前是怎么处理的,现在同一个比例因子出现了不同的屏幕分辨率。例如,iPad Pro 12.9" 和 iPad Pro 11" 的比例因子为“2x”,但分辨率分别为“2048x2732”和“1668x2388”。现在,如果我创建一个目标最高分辨率为 2048x2732 的图像,该图像不会针对分辨率 1668x2388 居中。

  1. contents.json 中是否有任何特定的键可以区分相同比例因子的屏幕 resolutions/sizes?
  2. 当我搜索 Apple 的资产目录文档时,在 documentation archive 中找到了它。这是否意味着我们不应该再对图像使用资产目录?是否有最新的背景图片设置标准?

您可以按照两个选项为不同的设备设置背景图片。

1-) 将 UIImageView 内容模式设置为 .aspectFill。通过设置此 属性,您的图像将针对不同的宽高比进行裁剪,但原始宽高比将受到保护。如果您使用重复的图像作为背景,我推荐此选项。

2-) 为不同的宽高比和分辨率设置两个不同的资产文件。如果您遵循此选项,在代码中,您需要检查设备并设置正确的图像资源。

let image: UIImage!
if UIDevice().userInterfaceIdiom == .phone {
switch UIScreen.main.nativeBounds.height {
    case 1920, 2208:
        print("iPhone 6+/6S+/7+/8+")
        image = UIImage(named:"StandartBackground.png")
    case 2436:
        print("iPhone X, XS")
        image = UIImage(named:"XBackground.png")
    case 2688:
        print("iPhone XS Max")
        image = UIImage(named:"XSBackground.png")
    }
}

建议: 常见且正确的方法是首选,但也会有不适合的情况。因此,尽量避免第二种选择,但如果没有其他选择。将每个不同的 宽高比 放入不同的资产文件。