仅使用Kingfisher库获取UIImage

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仅使用Kingfisher库获取UIImage相关的知识,希望对你有一定的参考价值。

我只需要获取UIImage,而不是使用Kingfisher library加载普通的UIImageView

为了实现它,我使用UIImageView实现了一个解决方法:

let imageView = UIImageView()

imageView.kf_setImageWithURL(NSURL(string: cpa.imageName)!, placeholderImage: nil,
        optionsInfo: [.Transition(ImageTransition.Fade(1))],
        progressBlock: { receivedSize, totalSize in
            print("(receivedSize)/(totalSize)")
        },
        completionHandler: { image, error, cacheType, imageURL in
            anView!.image = image //anView IS NOT an UIImageView
            anView!.frame.size = CGSize(width: 15.0, height: 15.0)
            print("Finished")
    })

这段代码完美无缺,但我希望以更干净的方式完成。这个库中有一个方法只能获得UIImage吗?异步和缓存

答案

你可以使用retrieveImage(with:options:progressBlock: completionHandler:)KingfisherManager方法。

也许是这样的:

KingfisherManager.shared.retrieveImage(with: url, options: nil, progressBlock: nil, completionHandler: { image, error, cacheType, imageURL in
    print(image)
})
另一答案

这是在kingFisher 5中下载图像的最新语法(在swift 4.2中测试)

func downloadImage(`with` urlString : String){
    guard let url = URL.init(string: urlString) else {
        return
    }
    let resource = ImageResource(downloadURL: url)

    KingfisherManager.shared.retrieveImage(with: resource, options: nil, progressBlock: nil) { result in
        switch result {
        case .success(let value):
            print("Image: (value.image). Got from: (value.cacheType)")
        case .failure(let error):
            print("Error: (error)")
        }
    }
}

如何调用上面的功能

self.downloadImage(with: imageURL) //replace with your image url
另一答案

使用新的Swift 3版本,您可以使用ImageDownloader:

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

ImageDownloader是翠鸟的一部分所以不要忘记import Kingfisher

另一答案

翠鸟5的另一种方式:

KingfisherManager.shared.retrieveImage(with: url) { result in
    let image = try? result.get().image
    if let image = image {
        ...
    }
}
另一答案

斯威夫特5

let url = URL(string: USER_IMAGE_PATH + "(arrGuserpic[index])")

cell.imgv.kf.setImage(with: url, placeholder: nil, options: nil, progressBlock: nil, completionHandler: { image, error, cacheType, imageURL in
if (image != nil){
    cell.imgv.image = image
} 
else {
    cell.imgv.image = UIImage.init(named: "user")
}
})
另一答案

在翠鸟5

imageView.kf.setImage(with: url) { result in
   switch result {
   case .success(let value):
       print("Image: (value.image). Got from: (value.cacheType)")
   case .failure(let error):
       print("Error: (error)")
   }
 } 

看到更多:https://github.com/onevcat/Kingfisher/wiki/Kingfisher-5.0-Migration-Guide

以上是关于仅使用Kingfisher库获取UIImage的主要内容,如果未能解决你的问题,请参考以下文章

为啥 SwiftUI 的 Kingfisher KFImage.Placeholder(UIImage(named: "logo")) 不接受 UIImage 为可接受的?

来自调试器的消息:在 UITableView/UICollectionView 中使用 gif 图像 Kingfisher 库滚动时因内存问题而终止

加载图像时使用 iOS 中的 Kingfisher 库进行图像优化?

将 NSString 中的文件名转换为 UIImage 以获取存储在资产库中的照片

如何将 UIImage 异步加载到 SwiftUI Image 中?

如何在 swift 中使用 kingFisher 库中的 AspectScaledToFitAndCenterSizeFilter