PHCachingImageManager не кэширует Swift 2.3

Я работаю с фреймворком 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 и был озадачен этой проблемой.

Извините, если это было действительно длинное чтение, но заранее спасибо за любую помощь!


person Kunal    schedule 28.09.2016    source источник
comment
Попробуйте фреймворк Kingfisher для простого в использовании захвата изображений и получите pod в соответствии с вашей быстрой версией.   -  person Anand Nimje    schedule 29.09.2016
comment
Мне нужно использовать только изображения галереи, мне не нужно ничего скачивать   -  person Kunal    schedule 29.09.2016


Ответы (1)


Прочтите о PHImageRequestOptions и свойстве deliveryMode, возможно, значение по умолчанию установлено на opportunistic

случай оппортунистический

Фото автоматически предоставляет один или несколько результатов, чтобы сбалансировать качество изображения и скорость отклика.

person mbutan    schedule 19.09.2017