Ios 仅使用翠鸟库获取UIImage
我只需要获取一个UIImage,而不是加载一个普通的UIImageView 为了实现这一点,我使用UIImageView实现了一种变通方法:Ios 仅使用翠鸟库获取UIImage,ios,swift2,uiimage,kingfisher,Ios,Swift2,Uiimage,Kingfisher,我只需要获取一个UIImage,而不是加载一个普通的UIImageView 为了实现这一点,我使用UIImageView实现了一种变通方法: let imageView = UIImageView() imageView.kf_setImageWithURL(NSURL(string: cpa.imageName)!, placeholderImage: nil, optionsInfo: [.Transition(ImageTransition.Fade(1))],
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的方法?异步和缓存的您可以使用KingfisherManager的方法检索图像(带有:选项:progressBlock:completionHandler:)进行此操作 也许是这样的:
KingfisherManager.shared.retrieveImage(with: url, options: nil, progressBlock: nil, completionHandler: { image, error, cacheType, imageURL in
print(image)
})
使用新的Swift 3版本,您可以使用ImageDownloader:
ImageDownloader.default.downloadImage(with: url, options: [], progressBlock: nil) {
(image, error, url, data) in
print("Downloaded Image: \(image)")
}
ImageDownloader
是翠鸟的一部分,所以不要忘记导入翠鸟这是翠鸟5中下载图像的最新语法(在swift 4.2中测试)
如何调用上述函数
self.downloadImage(with: imageURL) //replace with your image url
翠鸟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)")
}
}
查看更多信息:翠鸟5中的另一种方式:
KingfisherManager.shared.retrieveImage(with: url) { result in
let image = try? result.get().image
if let image = image {
...
}
}
斯威夫特5
此代码100%正常工作
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")
}
})
Swift 5:
我将在@Hardik Thakkar上完成回答,添加一个更改,以便您可以使用帮助某人的闭包返回图像:
func downloadImage(with urlString : String , imageCompletionHandler: @escaping (UIImage?) -> Void){
guard let url = URL.init(string: urlString) else {
return imageCompletionHandler(nil)
}
let resource = ImageResource(downloadURL: url)
KingfisherManager.shared.retrieveImage(with: resource, options: nil, progressBlock: nil) { result in
switch result {
case .success(let value):
imageCompletionHandler(value.image)
case .failure:
imageCompletionHandler(nil)
}
}
}
如何致电:
downloadImage(with :yourUrl){image in
guard let image = image else { return}
// do what you need with the returned image.
}
这将不会根据以下
cachePolicy:.reloadIgnoringLocalCacheData
利用缓存,这是使用Kinfisher而不是在Swift 3中将其重命名为KingfisherManager.shared.retrieveImage(with:url!,options:nil,progressBlock:nil){(image,error,cacheType,imageURL)->()在print(image)}
中,这是否也会缓存图像?@DoesData是的does@DmitrijRogov您是否需要执行任何操作来将图像存储在缓存中?它是内存还是磁盘中的缓存?资源是一个URL(“URL字符串”)对象,因此对于来自其他语言的任何人来说都不清楚。此外,您可以删除发送nil的参数,也可以在不关心图像不加载的情况下删除完成handler。这不获取UIImage对象,只允许您设置UIImageView的图像字段。使用此函数时,我在调用实例方法“retrieveImage”时没有得到精确匹配
downloadImage(with :yourUrl){image in
guard let image = image else { return}
// do what you need with the returned image.
}