2

アプリから直接ロードされた(ダウンロードされていない)多くの画像を表示しています。テーブル ビューを初めてスクロールすると、表示が遅くなります。私のセルがすべて表示された後はスムーズになります。理由はよくわかりません。

viewDidLoad にロードしている UIImage の配列があります。次に、テーブルビュー デリゲートで、特定のインデックス パスで画像を取得し、それをセルの UIImageView に設定します。

パフォーマンスを向上させる方法を知っていますか?

4

3 に答える 3

6

共有するためだけに修正しましたが、非常にうまく機能しました 従った手順。

1) 多くの画像を配置するためのスクロール ビューまたは uiview を保持する渡されたパラメーターとして Cell を使用して performSelectorInBAckground 関数を設定します。

2) バックグラウンド関数で、ファイルの imagewithContents を使用して、アプリケーション バンドルまたはローカル ファイルから保存されたイメージを読み込みます。

3) このコードを使用して、イメージを imageView に設定します。

    //// Start of optimisation - for iamges to load dynamically in cell with delay , make sure you call this function in performSelectorinBackground./////

    //Setting nil if any for safety
    imageViewItem.image = nil;

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);

    dispatch_async(queue, ^{
        UIImage *image = // Load from file or Bundle as you want

        dispatch_sync(dispatch_get_main_queue(), ^{

            //Set the image to image view not, wither cell.imageview or [cell add subviw:imageview later ]
            [imageViewItem setImage:image];
            [imageViewItem setNeedsLayout];
        });
    });

    //// End of optimisation/////

これにより、すべての画像が動的にロードされ、以前の遅くてぎくしゃくした動作よりも非常にスムーズにテーブル ビューがスクロールされます。

ではごきげんよう

于 2014-06-30T07:59:39.377 に答える
1

ここで提出した回答を読むことができます。

cellForRowAtIndexPath で CoreData から画像をロードするとスクロールが遅くなる

基本的な考え方は、Grand Central Despatch を使用して table-view-image-getting コードを別のスレッドに移動し、画像が利用可能になったときにセルをメイン スレッドに戻すことです。ファイルシステムからメモリに画像をロードするのに遅延がある場合でも、スクロールは非常にスムーズです。

于 2013-01-31T15:58:51.947 に答える
0

あなたの質問から私が理解しているのは、あなたの画像はすべて準備ができており、それらがRAMにロードされていることです(viewDidLoadに取り込まれた配列に格納されています)。この場合、助けになるために cellForRowAtIndexPath の正確なコードを確認したいと思います。私の本能は、メインスレッドで実行されるべきではない何かがそこで実行されていることを教えてくれます (彼が示唆したように)。問題は、それが NSArray (最悪の場合 O(log(n))) からのフェッチのみである場合、パフォーマンスの低下は見られないということです。

画像をダウンロードしていないことはわかっていますが、バックグラウンド スレッドで非 UI 操作を行うことをお勧めします。私はあなたを助けるかもしれない何かを書きました.

于 2013-01-31T16:11:23.813 に答える