【问题标题】:Using Kingfisher, images are not loading correctly in UITableView使用 Kingfisher,UITableView 中的图像无法正确加载
【发布时间】:2016-05-15 16:09:03
【问题描述】:

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

我已尝试按照 https://github.com/onevcat/Kingfisher 上的文档取消所有以前的下载任务,但没有帮助。

我尝试了以下代码:

// The image retrieving will stop.
imageView.kf.cancelDownloadTask()

这只会取消当前的单元格,至少从我可以理解。

【问题讨论】:

    标签: swift image uitableview scroll cell


    【解决方案1】:

    我的项目也有同样的问题。我正在寻找一种方法来实现您想要的相同功能:如果我滚动速度非常快,我想取消以前的下载。这是我使用 KingFisher 库(Swift 3)的方法:

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

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

    希望这会有所帮助!

    【讨论】:

    • 嗨,感谢您的回答,我也遇到了类似的竞争情况,通过取消 didEndDisplaying 我解决了这个问题。同样在 Android 流行的库 Glide 上使用类似的取消方法,唯一的缺点是如果它几乎完全下载它不会被缓存。您找到更好的解决方案了吗?
    • 不,我看不到缓存一半下载(或 95% 下载,如果你想这样说的话)图像的方法。我不确定翠鸟/任何其他缓存库是否支持这样的东西。
    • 没什么大不了的,我使用你的解决方案,效果很好。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多