Установить изображение в 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)")
}
Вы можете обратиться к этой шпаргалке.
SWIFT 5 Вы можете попробовать этот код:
пусть addURL = "https://..."
if let urlPhotos = URL(string: addURL) {
image.kf.setImage(with: urlPhotos, placeholder: UIImage(systemName: "folder"))
Убедитесь, что вы объявили @IBOutlet для UIImageView.