iOS PHImageManager.default (). requestImage обратный вызов вызывается дважды для одного и того же изображения - PullRequest
1 голос
/ 02 октября 2019

Когда я пытаюсь получить изображение с определенным размером, PHImageManager.default (). RequestImage вызывается дважды с изображениями разных размеров.

Вот код:

static func load(from asset: PHAsset, targetSize: CGSize? = nil, completion: @escaping (UIImage?)->()) {
        let options = PHImageRequestOptions()
        options.isSynchronous = false
        let id = UUID()
        PHImageManager.default().requestImage(for: asset, targetSize: targetSize ?? PHImageManagerMaximumSize, contentMode: .aspectFill,
                options: options, resultHandler: { image, _ in
            print(id)
            runInMain {
                completion(image)
            }
        })
    }

Я добавил UUID, чтобы проверить, печатается ли один и тот же UUID дважды.

1 Ответ

3 голосов
/ 02 октября 2019

Это потому, что первый обратный вызов возвращает миниатюру во время загрузки полноразмерного изображения.

Из официальной документации Apple:

Дляасинхронный запрос, Фото может вызывать ваш блок обработчика результатов более одного раза. Фото сначала вызывает блок, чтобы предоставить низкокачественное изображение, подходящее для временного отображения, пока оно готовит высококачественное изображение. (Если данные изображения низкого качества сразу доступны, первый вызов может произойти до того, как метод вернется.) Когда изображение высокого качества будет готово, Photos снова вызывает ваш обработчик результатов, чтобы предоставить его. Если менеджер изображений уже кэшировал запрошенное изображение в полном качестве, Photos вызывает ваш обработчик результатов только один раз. Ключ PHImageResultIsDegradedKey в параметре info обработчика результатов указывает, когда Photos предоставляет временное изображение низкого качества.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...