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()
これはのみ、現在のセルをキャンセルします。
こんにちは、私はまた、同様の競合状態を持っていたし、didEndDisplayingで取り消して、私は問題を解決しました。また、Androidの人気ライブラリGlideも同様のキャンセリング手法を採用していますが、殆ど完全にダウンロードされてもキャッシュされないという唯一の欠点があります。あなたはより良い解決策を見つけましたか? – Minas
いいえ、私は半分ダウンロードされた(またはあなたがそれを置く方法であれば、95%ダウンロードされた)イメージをキャッシュする方法はありません。私はキングフィッシャー/他のキャッシング・ライブがそのようなことをサポートしているかどうかはわかりません。 –
大したことではない、私はあなたのソリューションを使用し、それはかなり良い作品です。どうもありがとう! – Minas