2

現在、Facebookをアプリケーションに統合しており、現在、ログインしているユーザーの友達のプロフィール写真を読み込んでいます。私はこれらのユーザーをUITableViewで表示しています。各セルには、写真と友達の名前が表示されています。UIImageViewをサブクラス化し、対応するセルがcellForViewメソッドで処理されると、画像が非同期で読み込まれます。

ただし、上下に数回スクロールすると、画像がちらつきます。最初に間違った画像が読み込まれ、非常に短時間表示されてから、正しい画像が読み込まれます。そのため、セルがビューの外側にあるときに画像の読み込みを停止する方法を探す必要があると思います。

この問題を解決してくれる人はいますか?

前もって感謝します!

4

3 に答える 3

4

で、ロードされたイメージ(および進行中のロード操作(存在する場合))を閉じることができます
- (void)prepareForReuse method of UITableViewCell

セルを再利用することを強くお勧めします。セルがないとスムーズなスクロールが得られる可能性はありません。

于 2012-06-29T23:23:11.867 に答える
0

セルを再利用しないことを検討できます。ただし、ロードする必要のあるテーブルセルが多数ある場合(たとえば、多数の友人)、これによりパフォーマンスが低下する可能性があります。すべてのセルには独自のイメージがあるため、セルの再利用によってちらつきが発生することはありません。

もう1つ注意すべき点は、画像のファイルサイズです。実際に表示しているサイズよりも大きい可能性があります。より小さなバージョンを入手する方法があれば、それも間違いなく役に立ちます。

第三に、で画像ビューをデフォルトの画像に設定できますtableView:willDisplayCell:forRowAtIndexPath。ちらつきはおそらくまだ発生しますが、デフォルトの画像では、他の人の写真よりも見栄えが良くなります。実際、これがFacebookアプリの機能だと思います。

于 2012-06-29T19:53:02.497 に答える
0

セルが非表示になると、から削除されtableViewます。UITableViewCellしたがって、派生クラスのメソッドでオーバーライドできますwillMoveToSuperview:

- (void)willMoveToSuperview:(UIView *)newSuperview
{
    [super willMoveToSuperview:newSuperview];
    if(newSuperview == nil) {
        // Stop image downloading
    }
}
于 2012-06-29T20:07:13.893 に答える