Я установил .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: Radar а>