89

各セルにかなり大きな画像をロードする uitableview があり、セルの高さは画像のサイズによって異なります。スクロールのパフォーマンスはまずまずですが、ぎくしゃくすることがあります。

FieryRobot ブログで見つけた次のヒントを見つけました。

glassy-scrolling-with-uitableview

more-glassy-scrolling-with-uitableview

uitableview のスクロール パフォーマンスを改善するためのヒントはありますか?

4

5 に答える 5

157
  1. 行の高さをキャッシュします(テーブルビューはこれを頻繁に要求できます)
  2. テーブルで使用されているイメージに対して最も使用頻度の低いキャッシュを作成します(メモリ警告を受け取った場合は、非アクティブなエントリをすべて無効にします)
  3. 可能であれば、すべてをUITableViewCell'sで描画します。サブビューは絶対に避けてください(または、標準のアクセシビリティ機能が必要な場合は、コンテンツビューの)drawRect:drawRect:
  4. のレイヤーを不透明にしますUITableViewCell(コンテンツビューがある場合も同じです)
  5. UITableView例/ドキュメントで推奨されているように、reusableCellIdentifier機能を使用します
  6. にプリベイクされていないグラデーション/複雑なグラフィック効果は避けてUIImageください
于 2009-08-29T22:57:59.977 に答える
40
  1. サブクラス化する場合は UITableViewCell、ペン先を使用せず、代わりにコードで記述してください。Nibファイルをロードするよりもはるかに高速です。
  2. 画像を使用している場合は、画像をキャッシュしていることを確認してください。これにより、ファイルから画像を1回以上読み込む必要がなくなります(メモリがある場合は、画像が占めるスペースの量に驚かれることでしょう)。
  3. できるだけ多くの要素を不透明にします。同様に、透明度の高い画像を使用しないでください。
于 2009-08-29T22:11:20.973 に答える
34

Tweetieの背後にいる開発者はこれについて広範囲に記述しており、そのアプリでどのように行われたかを示すコードをいくつか持っています。基本的に、彼/彼女はテーブルセルごとに1つのカスタムビューを提唱し、それを手動で描画します(他のオプションの中でも、Interface Builderでサブビューするのではなく)。

ツイートの高速スクロールとuitableview

また、AppleはTableViewSuiteチュートリアルでTableViewの独自のサンプルコードを更新しました(おそらくこれに対応して?)

TableViewSuite

于 2009-10-26T03:03:51.357 に答える
1

UITableView スクロールの最大のパフォーマンス キラーは、任意のセル ビュー レイヤーにシャドウを描画することです。そのため、スクロール パフォーマンスが重要な場合は、基本的にメイン スレッドの速度が低下しない限り、シャドウを実行しないでください。

受け入れられた回答のどれも影とレイヤーについて言及していないので、これは言わなければならないと思った. :+)

于 2014-06-27T06:09:42.093 に答える
0

UITableViewスクロールのパフォーマンスに関する問題は、他の回答で既に説明されている手法を使用して解決できます。ただし、多くの場合、パフォーマンスの低下は、本質的に誤ったもの、または反復的なものによって引き起こされます。

がセルをUITableView再利用するという事実と、各セルが独自のイメージを必要とする可能性があるという事実が相まって、ソリューションが少し複雑になります。一般的な解決方法から、注意すべき点をまとめます。

  1. REST / データベースからデータ ソースにデータをロードします。このステップはバックグラウンドで実行する必要があり、最終的には GCD キューと一緒に dispatch_async を使用します。
  2. 関連するデータ モデル オブジェクトを作成して初期化し、それらを配列内に配置する
  3. [tableView reloaddata]
  4. cellForRowAtIndexPathに、配列の正しいデータ モデル オブジェクトからデータ (テキスト) を設定するコードを含めます。
  5. 画像も URL の形式になっている可能性があるため、テーブル ビューによってセルが再利用されるため、この手順は少し風変わりかもしれません。事実の核心は、非同期キューを使用してデバイスキャッシュ/ URL からもう一度画像をロードし、それを正しい cell.image (セル画像プロパティが何であれ) に設定することです。

問題を回避するには、テーブル ビュー内の画像の遅延読み込みに関するこのチュートリアルを参照してください。

于 2016-01-16T13:23:23.323 に答える