2

UITableViewCellXcodeで独自に設計し、にロードして、カスタムテーブルを作成していcellForRowAtIndexPathます。スクロールの問題に直面しています。テーブルのスクロールは非常に遅く、スムーズではありません。各セルに私は持っています:

  • 2または3のいずれかUIImageViewで、必要に応じて3番目のものが動的に追加されます
  • 1UILabel
  • 1UITextView
  • 一部のセルには2つUIButton、一部には1UIButtonがあり、大部分にはボタンがまったくない場合があります
  • 一部のセルでは、オーバーレイを追加する場合がありますUIView

画像ビュー、テキストビュー、ボタンのサイズはセルごとに異なります。テーブルがスクロールされるたびにサイズが計算されないようにするために、すべてのサイズを読み込んviewWillAppearで配列に格納し、内部でcellForRowAtIndexPathは配列からサイズを読み込んで目的のオブジェクトに設定するだけです。

Webで見つけたすべてのアイデア(ここif(cell == nil)に示すように画像を本文にロードする、セルをデキューしないなど)を試しましたが、問題は解決しませんでした。

一方、チャットアプリのWhatsAppは、セルごとに同じ量のアイテムを使用していることに気付きました(たとえば、ユーザーが画像を受け取った場合、[表示]と[転送]の2つのボタン、画像のサムネイル、サムネイルの横にあるチェックマークの画像、日付がありますラベル、サムネイルの後ろのバブル画像...)しかし、そこでのスクロールは非常にスムーズです。

テーブルに10個のセルしかない場合でも、スクロールが遅くなります。これが私の質問です:

  1. 私は気づいていない劇的に間違ったことをしていますか?
  2. 遅いスクロールを防ぐためにカスタムセルに追加する必要があるアイテムの数に制限はありますか?
  3. XcodeのProduct->Profileのようなものを使用して、スクロールが遅い理由を検出する方法はありますか?
  4. 誰かが私の問題の解決策を提案できますか?

よろしくお願いします。

4

3 に答える 3

1

画像を使用しているときに TableView の操作が遅いのは、通常、サイズ変更操作が原因です。私が最後に作成したアプリには、Web から取得した画像が含まれていました。例として、4k ピクセル x 4k ピクセルの画像が入ってきました。他のすべては、表示しようとしていたサムネイル サイズの画像よりもはるかに大きかった。要するに、画像が画面から消えるたびに、画像が RAM から移動されてフラッシュに戻されます。これは、RAM メモリを節約するのに役立ちます。問題は、UIImageView に割り当てている元の UIImage がフラッシュに残ることです。UIImage は元のサイズの画像を保持します。したがって、画像が画面に戻るたびに、元のサイズからリサイズする必要があります (表示したいサイズよりも小さいか大きい)。4k px x 4k px の画像が画面に表示されるたびに、TableView に不具合が発生しました。トリックは、UIImageView をサポートする UIImage にイメージを割り当てる前に、表示したいサイズにイメージを正確に合わせることです。例として、このテーブル ビューは一度に最大 10 ~ 12 個のアイテムを表示するだけであり、それでも非常に低速でした (すべての画像が Web から完全にロードされた後でも)。

別の潜在的な遅さ。表示されているデータをコピーして貼り付けるために選択できるようにすることを最初に望んでいた別のアプリを作成しました。これは UITextView オブジェクトで行うことができます。問題は、私が出力していた値のテーブルが幅 17 列、行 218 だったことです。この場合、各 UITextView にはスクロール機能があるため (オフにした場合でも)、各 UITextView が独自のサブビュー表示座標などを再計算する必要があったため、テーブル全体のスクロールが非常に遅くなりました。最後に、データを編集したり、コピーして貼り付けたりする必要がない場合は、実際には UILabel オブジェクトでのみ表示する必要があります。これを行うと、UITableView のパフォーマンスが大幅に向上しました。

于 2012-06-17T14:44:19.090 に答える
1

セルごとに複数の画像で同じ問題がありました。各セルに1つある場合、UITextViewはそれを殺しています。また、表示したくない画像を非表示にし、配列にループしないようにして、画像を表示または非表示にする必要があるかどうかを確認しますが、読み取り可能な BOOL の配列を作成します

于 2012-06-17T13:08:23.800 に答える
0

これを試してください: -webkit-overflow-scrolling: touch; ここから取得: http://css-tricks.com/snippets/css/momentum-scrolling-on-ios-overflow-elements/

于 2014-01-08T15:53:59.460 に答える