画像をUITableViewに非同期(GCD)で読み込んでいて、セルが複数の画像をシャッターして1つの画像に収まるという奇妙な動作が見られます。言葉で表現するのは難しいので、私はスクリーン・レコーディングを行いました。そこでは、特定のセルでは、複数のイメージが1つに収まる前にシフトします。UITableView複数の画像を使った非同期画像ロードシャッター
http://www.youtube.com/watch?v=PKuqng81QX4
Iは(RESTエンドポイントからの)画像を取得し、その後、メインキューがセルに画像を設定するキューを使用しています。ここでは、コードスニペットです:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
// ..after getting the cell:
dispatch_queue_t imageQ = dispatch_queue_create("imageQ", NULL);
dispatch_async(imageQ, ^{
NSString *galleryTinyImageUrl = someFunctionToGetThumbnailUrl;
NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:galleryTinyImageUrl]];
dispatch_async(dispatch_get_main_queue(), ^{
cell.imageView.image = [UIImage imageWithData:imageData];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
});
});
dispatch_release(imageQ);
これは(オフ火災にこれらの細胞の画像負荷の30をトリガ、テーブルの上に、すなわちユーザーフリックアップ)短時間で複数回呼び出さなっているという事実は、かどうか、私の懸念を引き起こしすべての非同期スレッドは、それらが想定していた場所に安全に「着陸」します。私が見ている動作(ビデオ中)は、私がここで間違っていることを確認しているようです。私はあなたが持っているかもしれない詳細や広範なアプローチ提案に感謝します。
ありがとうございました!
ありがとうございました!私は 'cell.imageView.image = nil;'を追加した直後に新しい/再利用するセルを取得し、それを修正しました! – Steven
うれしい私はあなたを助けることができます。 –
イメージをループでダウンロードしないようにするにはどうすればよいですか? – mikezang