使用Kingfisher在imagePickerController中设置Image

时间:2017-08-03 14:50:46

标签: ios swift swift3 uiimage kingfisher

我希望使用UIImageView将图片设置为imagePickerController中的Kingfisher,但没有任何反应。首先,我将用户引导至照片库。在用户选择照片并返回后,我会将照片显示为UIImage,将URL设为imagePickerController。翠鸟没有设置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)

    }

我的网址是"assets-library://asset/asset.JPG?id=D21C7124-472A-44F8-A22B-B3A5A0C48E32&ext=JPG" 0x00000001702f7680"。我的网址有什么问题,或者我可以用翠鸟设置UIImage。我确定我可以获取照片,因为当我尝试将changedImage设置为kf时,它可以正常工作。我试过了  Kingfisher and swift 3 - cannot set image with url但它没有用。

4 个答案:

答案 0 :(得分:3)

在完成处理程序和主线程

上执行此操作
  func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {


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

}

答案 1 :(得分:2)

是的,你是对的。真是太奇怪了。

尝试在选择器关闭方法完成时设置已更改的图像。也许它会起作用:

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

答案 2 :(得分:0)

我没有尝试从本地网址上载,但我确信有一种方法可以使用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

答案 3 :(得分:0)

快速 5 你可以试试这个代码:

让 addURL = "https://..."

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

确保您将 @IBOutlet 声明为 UIImageView。