2011-01-06 9 views
1

iPhoneの写真ピッカーとほぼ同じように見え、機能する写真のスクロールグリッドがあります。これは、一連の写真を表示するカスタムUITableViewCellを使用するUITableViewから構築されます(Three20と非常によく似ています)。イメージのロード中にUITableViewスクロールのパフォーマンスを向上させる

スクロールのパフォーマンスが悪いという点以外は素晴らしいです。私はすでに高速UITableViewスクロールのベストプラクティスのほとんどに従っています(àla Tweetie)。

画像はすべてアプリケーションにバンドルされています。必要に応じてUIスレッドにロードします。 UIImageのimageNamedを使用します。最初に読み込まれた後に画像がキャッシュされるようにします。一度テーブルビューをスクロールすると、非常にスムーズにスクロールします。

問題は、初めてテーブルビューをスクロールするとスクロールがぎこちないことです。私はアプリをプロファイリングして、ファイルシステムから画像を読み込むのに大部分の時間が費やされていることに気付きました。これらはJPEG画像で、すでにサイズが正しく(小さい)サイズになっています。代わりにPNG画像を使用しようとしましたが、パフォーマンスはあまり改善されません。

iPhoneの写真ピッカーは、はるかに良いローディングパフォーマンスを発揮します。すべての写真を1つの画像にまとめると、一度読み込んだ後に小さな画像に分割する方が速くなるのではないかと思います。それは確かにゲームでは機能しますが、実際にはまったく別の話です。誰もその経験をしていますか?

私はパフォーマンスを改善するための他のアイデアはありますか?

ちなみに、私は、行ごとにimageViewに割り当てられた1つのイメージで標準のUITableViewCellsを使用している別のUITableViewのパフォーマンスの問題はそれほどありません。

答えて

2

ビューの読み込み時に、すべての画像をプリキャッシュすることができます。それを超えると、おそらくバックグラウンドで画像をロードすることになります(ファイルシステムからロードしていて、ウェブではないにしても)。私はこれを自分で試したことはありませんが、おそらくhttps://github.com/rs/SDWebImageのようなものを使用し、URLがファイルシステムを指していることがあります。最初にいくつかのプレースホルダ画像が表示されることがありますが、画像がロードされている間はUIが詰まることはありません。

+0

プリキャッシングと非同期ロードの両方の手法を試しました。非同期読み込みはひどく見えました。なぜなら、画像はすばやく読み込まれますが、ゆっくりと目立つちらつきが発生するからです。プリキャッシングはうまくいった。私は数ヶ月で350枚の画像をプリキャッシュする必要があるときに何が起こるのか心配しています(私は現在100枚だけプリキャッシュする必要があります)。偉大な答えをありがとう。 –

+1

よろしくお願いします!非同期読み込みの場合、プレースホルダイメージを持たない方が良いかもしれませんが、代わりにイメージが表示される空白領域です。それはちらつきを防ぐかもしれない。 –

0

RSSフィードから解析された情報を表示するためにUITableViewを使用して同様の問題が発生しました。膨大な量のデータがあったときに、スクロールするパフォーマンスの問題が発生しました。私はまだそれに取り組んでいますが、テーブルがスクロールされているときに解析を中断します。スクロールが停止すると再開します。私は自分のコンピュータではないが、私はtableViewDidScrolltableViewDidEndDeceleratingを使ったと信じている。これらのテーブルビューの代理人をチェックすることができます。いずれにしてもうまくいきますが、私の解析を一時停止するにはよりエレガントな方法が必要です。

+0

Joe、バックグラウンドスレッドでRSSフィードを解析している場合は、スレッド優先順位を0に設定してください(バックグラウンドスレッドコードの先頭に '[NSThread setThreadPriority:0]'を設定してください)。私はそれが本当にうまく働くことが分かったし、あなたの問題をよりエレガントに解決するかもしれない。 –

-1

素晴らしいです。それは魅力のように機能します!効率的に、insertRowAtIndexPathを使用してテーブルをリロードすることになりました。今すぐそれはそれを行う方法

ありがとう! Joe

0

PagingEnabledプロパティをoffに設定すると、スクロールのパフォーマンスが向上します。

関連する問題