質問

私は持っています UITableView セル内に大量の画像が表示されますが、スクロールのパフォーマンスに満足できません。私の UITableView iPhoneの写真アプリのようなものです。iPhoneの写真アプリが、まるで画面上に何もないかのように高速でスクロールする理由を知っている人はいますか?

また、パフォーマンスやスクロール速度を上げるためのヒントやコツを持っている人はいますか?

役に立ちましたか?

解決

画像を事前にキャッシュする必要があり、遅延して実行しないでください。表をスクロールすると、 UITableViewDataSource:cellForRowAtIndexPath: メソッドが呼び出され、そこに画像をロードしている場合、スクロールとしてセルの内容を要求していることがわかり、アプリケーションに遅延が発生します。cellForRowAtIndexPath を作成してみてください。このようなもの:

NSDate *date = [NSDate date];
... your cell loading code ...
NSLog( @"Elapsed time to generate cell %.2d", [date timeIntervalSinceNow] );

各セルの取得に費やした時間が表示されます。

これを回避するには、必要なだけ複雑にすることができます。 多く 画像に関しては、ますます賢くなる必要があります。ページ読み込みを行うことができます。この場合、要求された最後のセルの NSIndexPath を追跡し、スクロールが上向きか下向きかを判断し、次を使用します。 +NSImage:画像名: 数ページ分の画像を前方に一度に取得する(つまり、現在の位置から 5 つ前の画像)、または都合のよいものは何でも(スワイプするには指をテーブルの下に戻さなければならないという事実を利用して)そのため、テーブル要素の消費が一時停止します。ページ サイズをスワイプを埋めるのに十分な大きさにすることができます)。ただし、すべてのセルに不安定な負荷がかかるのではなく、すべての影響を一度に受けるだけになるため、これはおそらくまだ良いとは言えません。

制御を UI にすばやく戻し、システムが次を使用して画像のプリフェッチ ページをスケジュールできるようにすることができます。 NSRunLoop:performSelector:ターゲット:引数:順序:モード: NSImage:imageNamed: を使用してメインの実行ループから外し、セルが要求されたときに十分前にフェッチしていれば表示できるようになります。

ただし、メモリの問題については十分に注意する必要があります。これが問題だと思われる場合は、次を使用してください NSImage:initWithContentsOfFile:, 、メモリ不足の状況で画像キャッシュをクリーンアップします。キャッシュ無効化アルゴリズムで使用される戦略によっては、これらの状況では、キャッシュをパージし、無効化されたプリフェッチを再ロードする必要があるときに「途切れ」が発生する可能性があります。

他のヒント

グレートスクロールのパフォーマンスの結果はUITableViewCellのサブクラス化をして、直接、各セルの内容を描画することによって報告されています。 をhref="https://stackoverflow.com/questions/1106658/custom-draw-a-uitableviewcell/1107051">参照してください。

ここでの問題はメモリであり、一度にあまりにも多くの高解像度の画像をロードしているメモリがないので、写真アプリは、それがスクロールビューを使用していますし、それは一度に3枚の画像の最大をロードするテーブルビューを使用していません懸念は、uは写真アプリに似た何かをしようとしている場合、スクロールビュー

を使用
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top