Я работаю с фреймворком Photos в iOS, чтобы разработать оверлей для своего приложения, который работает аналогично оверлею WhatsApp. Чтобы получить доступ к ресурсам изображения галереи пользователя, мне нужно использовать фотографии, и я не могу избежать использования UIImagePickerController.
Чтобы лучше познакомиться с фреймворком, я решил сначала создать собственное средство выбора изображений и начал с загрузки изображений из моей галереи и помещения их в представление коллекции на простом экране. Как только я получил активы, используя PHAsset.fetchAssets(with: .image, options: fetchOptions) as PHFetchResult<PHAsset>
Затем я использую эти активы в массиве и запускаю кэширование в PHCachingManager по умолчанию следующим образом:
cachingImageManager.startCachingImages(for: self.assets,
targetSize: CGSize(width: 150.0, height: 150.0),
contentMode: .default,
options: nil)
В моем cellForItemAtIndexPath для collectionView я использую:
cachingImageManager.requestImage(for: assets[indexPath.row], targetSize: CGSize(width: 150.0, height: 150.0), contentMode: .default, options: nil, resultHandler: { (image, info) in
cell.imageView.image = image
})
Как видите, согласно документации Apple, я использую кэширование с одинаковыми targetSize, contentMode и параметрами в обоих местах, и поэтому блок обратного вызова, в котором я устанавливаю изображение, должен вызываться ровно один раз с изображением высокого качества.
Однако, если я перезагружаю collectionView или даже при первой загрузке представления коллекции, обратный вызов вызывается дважды, один раз с изображением низкого качества и второй раз с изображением высокого качества.
Я не могу не думать, что это ошибка, когда я скачал учебный код Apple для платформы Photos, и он делает то же самое, хотя в документе конкретно говорится, что если мы отправим те же параметры, contentMode и targetSize для ресурса, он вызывается только один раз при кэшировании. (Даже код учебника сначала загружает изображение низкого качества, а затем изображение высокого качества, независимо от того, сколько раз вы перезагружаете коллекцию).
Любая помощь будет чрезвычайно признательна, так как я новичок в кодировании AVFoundation и был озадачен этой проблемой.
Извините, если это было действительно длинное чтение, но заранее спасибо за любую помощь!