0

UICollectionView をスクロールすると、すべてcellForItemAtIndexPathが一貫して呼び出されるわけではないようです。メソッドが完了する前にセルがリサイクルされるためかどうか疑問に思っています。

たとえば (私は AFNetworking の UIImageView カテゴリを使用しています):

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
THMovieCell* cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];

NSNumber* position = [[NSNumber alloc] initWithInteger:indexPath.row + 1];
THMovie* movie = [self.Movies objectForKey:position];

if (movie.ImageUrl) {
    [cell.Cover setImageWithURL:movie.ImageUrl];
}

cell.Title.text = movie.Title;

return cell;
}

...しかしcell.Title、カスタムセルの UILabel は一貫して変更されていますが、画像はそうではありません。

セルの高速スクロールのパフォーマンスを向上させる最善の方法は何ですか?

4

1 に答える 1

0

内部について知らずに見分けるのは難しいですTHMovieCellが、それでもです。画像の URL を に設定しますmovie.ImageUrl。それがリモート URL であり、その画像がまだキャッシュされていない場合、この画像をロードする必要があるため、表紙の更新が遅くなるのは避けられません。もう1つの考えられる理由は、画像サイズです。画面に 1024x1024 の画像が 10 個あると、スクロールに大きな遅延が発生する可能性があります。

  1. 画像キャッシュのパフォーマンスがある場合は確認してください。非同期にして、ムービーが既に画面外にあるため不要な画像読み込み操作をキャンセルします。
  2. 画像サイズを確認してください。可能な限りサムネイルを使用してください。
  3. 表紙の画像をデフォルトのローカル画像に設定して読み込みプロセスを示し、その後に新しい画像 URL を設定します。このようにして、カバーが変更されようとしていることがユーザーに通知されます。
  4. カバー更新ロジックを修正します。ムービーに画像がない場合、セルの画像は更新されず、以前に使用されたムービーの画像が表示され続けます。
于 2013-01-20T08:45:33.673 に答える