使用Kingfisher在imagePickerController中设置图片

4

我想在使用Kingfisher时将图片设置到我的UIImageView中的imagePickerController,但是没有任何反应。首先,我引导用户前往相片库。当用户选择照片并返回后,我会从imagePickerController中获取照片作为UIImage和一个URL。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有问题吗?我能否使用kingfisher设置UIImage?我确定我可以获取照片,因为当我尝试设置没有kfchangedImage时它也可以工作。我试过了Kingfisher和swift3-无法使用url设置图像,但它没有起作用。

4个回答

3

在完成处理程序中与主线程一起执行此操作

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


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

}

2

没错,你说得对。这确实很奇怪。

尝试在选择器取消方法的完成时设置更改后的图像。也许这样会起作用:

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

0

我还没有尝试从本地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


是的,一定有一种简单的方法可以使用Kingfisher设置图像。我查看了备忘单,但没有找到。这太奇怪了。 - AtaerCaner
你想在什么情况下使用Kingfisher?是为了缓存功能吗? - Kiester

0

SWIFT 5 你可以尝试这段代码:

let addURL = "https://..."

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

请确保您已经为 UIImageView 声明了 @IBOutlet。

请提供您的答案解释,以便下一个用户知道为什么这个解决方案适用于您。 - Elydasian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接