Установить изображение в imagePickerController с помощью Kingfisher

Я хочу установить изображение для моего UIImageView в imagePickerController с использованием Kingfisher но ничего не происходит Сначала я направляю пользователя в библиотеку фотографий. После того, как пользователь выбирает фотографию и возвращается, я получаю фотографию как UIImage и URL в imagePickerController, Kingfisher не имеет метода для установки UIImage, Поэтому я пытаюсь установить его из URL, но я просто вижу пустой UIImageView, Мой код

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    let changedImage = info[UIImagePickerControllerOriginalImage] as! UIImage
    let url = info[UIImagePickerControllerReferenceURL] as! URL


    profilePhotoImage.kf.setImage(with: url)

    picker.dismiss(animated: true, completion: nil)

    }

Мой URL-адрес, "assets-library://asset/asset.JPG?id=D21C7124-472A-44F8-A22B-B3A5A0C48E32&ext=JPG" 0x00000001702f7680", Что-то не так с моим URL или я могу установить UIImage с зимородком. Я уверен, что могу получить фото, потому что, когда я пытаюсь установить это changedImage без kf оно работает. Я попробовал Kingfisher и swift 3 - не могу установить изображение с URL, но это не сработало.

4 ответа

Решение

Да, ты прав. Это действительно так странно.

Попытайтесь установить измененное изображение при завершении метода выбора. возможно это сработает

picker.dismiss(animated: true, completion: nil)
 self.imageView.image = self.changedImage
}

Сделайте это по завершению обработчика вместе с основным потоком

  func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {


    dismiss(animated: true, completion: {
            DispatchQueue.main.async {
                self.imgProfile.kf.base.image = image
            }
    })

}

Я не пробовал делать загрузку с локального URL, но уверен, что есть способ загрузить изображение с помощью Kingfisher.

Используйте ImageDownloader для загрузки изображения без кэширования

ImageDownloader.default.downloadImage(with: url, options: [], progressBlock: nil) { 
(image, error, url, data) in 
    print("Downloaded Image: \(image)")
}

Вы можете обратиться к этой шпаргалке.

https://github.com/onevcat/Kingfisher/wiki/Cheat-Sheet

SWIFT 5 Вы можете попробовать этот код:

пусть addURL = "https://..."

          if let urlPhotos = URL(string: addURL) {
        image.kf.setImage(with: urlPhotos, placeholder: UIImage(systemName: "folder"))

Убедитесь, что вы объявили @IBOutlet для UIImageView.

Другие вопросы по тегам