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

Mat*_*ite 3 scroll image cells uitableview swift

我刚刚开始使用KingFisher。

当您向下快速滚动UITableView时,所有网络/下载请求都将备份,因此当它停止滚动时,它仍会完成先前的请求。

这会导致所有图像闪烁着不同的图片,直到完成所有备份请求。

这是我的代码,用于从缓存或网络中检索图像。

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")
            })
        }
Run Code Online (Sandbox Code Playgroud)

我尝试使用https://github.com/onevcat/Kingfisher上的以下文档来取消以前的所有下载任务,但使用了却没有帮助。

我尝试以下代码:

// The image retrieving will stop.
imageView.kf_cancelDownloadTask()
Run Code Online (Sandbox Code Playgroud)

这只会取消当前的单元格,至少在我看来。

An *_* Se 5

我的项目有绝对相同的问题。我正在寻找一种实现与您想要的相同的方法:如果我快速滚动,–我想取消以前的下载。这是我使用KingFisher库(Swift 3)的方法:

func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentify) 
    cell?.imageView?.kf.cancelDownloadTask()

}
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助!