我已经.heic
在我的项目中的文件夹中设置了图像xcassets
以节省一些空间。但是我无法通过UIImage(named:)
构造函数加载它们。我总是得到nil
,所以我必须加载它们的唯一方法是指定 URL。你知道为什么吗?
imageView.image = UIImage(named: "stone") // This returns nil.
同样,如果我将它们作为文件添加到项目中并通过这种方法访问它们,我创建的一切都很好(或使用像 SDWebImage 这样的库),但我相信我正在失去应用程序细化的能力,因为图像作为文件托管,因此例如 iPhone 7 将在仅需要时同时具有2x
和3x
分辨率2x
。
extension UIImage {
convenience init?(heicName: String, useScale: Bool = false) {
guard let resourcePath = Bundle.main.path(forResource: heicName.fileName(fileExtension: .heic, useScale: useScale), ofType: nil) else {
return nil
}
let url = URL(fileURLWithPath: resourcePath) as CFURL
guard let source = CGImageSourceCreateWithURL(url, nil),
let image = CGImageSourceCreateImageAtIndex(source, 0, nil) else {
return nil
}
self.init(cgImage: image)
}
}
所以我的问题是,任何人都可以向我解释使用 HEIC 作为图像资产文件夹中托管的图像并使其与应用细化兼容的过程(只需获取所需的资源,即 2x、3x)吗?
更新: 在研究更多之后,我意识到当我在图像视图上设置图像名称时,图像是从 IB 加载的。你知道这是如何在内部工作的吗?IB 使用哪个构造函数将 UIImage 设置为 UIImageView?
更新 2: 我已向 Apple 提交了雷达: 雷达