画像ダウンロード、キャッシュ用のカテゴリ(UIImageView + SDWebcache.m)を提供するSDWebImageライブラリを提供しており、UITableViewまたはUIColllectionViewセル。私はライブラリを使いたくないし、同様のカテゴリを作りたいと思っています。イメージがダウンロードされたら、このイメージが属するセルを追跡し、セルが再表示された別のindexPathにイメージを設定しないようにセルが表示されているかどうかを確認します。私が書いたコード(キャッシング・ロジックがここに削除されます):ライブラリを使用せずにカテゴリを使用して、画像をダウンロードしてTableViewセルを非同期で更新します。
// Inside the category, I have this method
-(void)SetThumbImageFordownloadURL:(NSString*)url {
[MyDownloadManager asyncImageDownload:url withProgressHandler:nil andCompletionHandler:^(UIImage *image, NSUInteger errorCode){
dispatch_async(dispatch_get_main_queue(), ^{
//if cell is not visible and is reused by another index, this image wil be set on wrong cell
[self setImage:image];
});
}];
}
@Sneakw Wiithこの方法には問題があります。 TableViewまたはコレクションビューには、一度に複数のセルが表示されます。したがって、URL1のイメージがダウンロードされると、一度に10個のイメージがコレクションビューで表示されると仮定して、URL 10イメージのダウンロードを開始できました。したがって、downloadImage URLはカテゴリメソッドで提供されたURLと一致せず、画像が表示されてもセルに設定されません。 –
@DeepAroraデータソースメソッドwillDisplayまたはcellForRowの中でブロックを実行すると、ブロックが正しいセルを実行しますが、メソッドの外でこれを実行すると、画像を受け取るたびに可視セルがループする必要があります。 –