Установите изображение в 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 с помощью Kingfisher. Я уверен, что смогу получить фотографию, потому что, когда я пытаюсь установить это changedImage без kf, оно работает. Я попробовал Kingfisher и Swift 3 - не могу установить изображение с url но это не сработало.


person AtaerCaner    schedule 03.08.2017    source источник


Ответы (4)


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

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

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

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

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


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

}
person Jamil    schedule 08.09.2017

Я не пробовал выполнить загрузку с локального 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

person Kiester    schedule 03.08.2017
comment
Да, должен быть простой способ установить изображение с зимородком. Я проверил шпаргалку, но не нашел. Это так странно. - person AtaerCaner; 04.08.2017
comment
В каком контексте вы хотели бы использовать Kingfisher? Это для кеширования? - person Kiester; 04.08.2017

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

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

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

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

person Kuralay Biehler    schedule 19.07.2021
comment
Пожалуйста, объясните свой ответ, чтобы следующий пользователь знал, почему это решение сработало для вас. - person Elydasian; 21.07.2021