使用Kingfisher,图像无法在UITableView中正确加载

时间:2016-05-15 16:09:03

标签: swift image uitableview scroll cells

我刚开始使用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()

这只会取消当前的细胞,至少从我可以理解。

1 个答案:

答案 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()

}

此方法必须在表视图委托中声明。它将取消已滚动单元格的下载任务任务。

希望这有帮助!