我刚开始使用KingFisher。
当你在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()
这只会取消当前的细胞,至少从我可以理解。
答案 0 :(得分:3)
我的项目完全相同。我正在寻找一种方法来实现你想要的同样的东西:如果我非常快地滚动, - 我想取消以前的下载。这是我的方法,使用KingFisher库(Swift 3):
func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentify)
cell?.imageView?.kf.cancelDownloadTask()
}
此方法必须在表视图委托中声明。它将取消已滚动单元格的下载任务任务。
希望这有帮助!