2
我刚开始使用KingFisher。使用Kingfisher,UITableView中的图像加载不正确
当你向UITableView滚动的速度过快时,所有网络/ doadload请求都会得到备份,所以按时间停止滚动,它仍然会完成那些先前的请求。
这会导致所有图像闪烁不同的图片,直到所有备份的请求都完成为止。
这是我的代码从缓存或网络检索图像。
if ImageCache.defaultCache.cachedImageExistsforURL(finished_URL!) == true {
print("image is already cached.")
if cell.tag == indexPath.row{
cell.card_imageIV.image = UIImage(imageLiteral: "ic_error")
KingfisherManager.sharedManager.retrieveImageWithURL(finished_URL!, optionsInfo: nil, progressBlock: nil, completionHandler: { (image, error, cacheType, imageURL) ->() in
cell.card_imageIV.image = image
print("Retrieved cached image")
})
}
}else{
cell.card_imageIV.kf_setImageWithURL(finished_URL!, placeholderImage: self.placeholderImage, optionsInfo: nil, completionHandler: { image, error, cacheType, imageURL in
print("\(card_name): Finished")
})
}
我已经试过了取消所有以前的下载任务,使用但并没有帮助下在https://github.com/onevcat/Kingfisher文档。
下面的代码我想:
// The image retrieving will stop.
imageView.kf_cancelDownloadTask()
这仅取消当前的细胞,至少从我可以做的意义。
嗨,感谢您的回答,我也有类似的竞争条件,取消didEndDisplaying我解决了这个问题。另外在Android流行的图书馆Glide使用类似的取消方法,唯一的缺点是如果它几乎完全下载,它不会被缓存。你找到更好的解决方案吗? – Minas
不,我没有办法缓存半下载(或95%下载,如果这是你想要的方式)图像。我不确定翠鸟/任何其他缓存库支持这样的事情。 –
好吧,没什么大不了的,我使用你的解决方案,它工作得很好。非常感谢! – Minas