2016-05-15 14 views
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() 

これはのみ、現在のセルをキャンセルします。

答えて

2

私のプロジェクトでは全く同じ問題があります。私はあなたが望むのと同じものを実装する方法を探しています:もし私が非常に速くスクロールすれば - 私は以前のダウンロードをキャンセルしたいです。ここでカワセミライブラリ(スウィフト3)を使用して、このための私のアプローチです:

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

} 

このメソッドは、テーブルビューのデリゲートに宣言する必要があります。既にスクロールしたセルのダウンロードタスクをキャンセルします。

希望すると便利です。

+0

こんにちは、私はまた、同様の競合状態を持っていたし、didEndDisplayingで取り消して、私は問題を解決しました。また、Androidの人気ライブラリGlideも同様のキャンセリング手法を採用していますが、殆ど完全にダウンロードされてもキャッシュされないという唯一の欠点があります。あなたはより良い解決策を見つけましたか? – Minas

+1

いいえ、私は半分ダウンロードされた(またはあなたがそれを置く方法であれば、95%ダウンロードされた)イメージをキャッシュする方法はありません。私はキングフィッシャー/他のキャッシング・ライブがそのようなことをサポートしているかどうかはわかりません。 –

+0

大したことではない、私はあなたのソリューションを使用し、それはかなり良い作品です。どうもありがとう! – Minas

関連する問題