setNeedsDisplayを指定してdrawRectを呼び出すたびに、膨大な量の画像が表示されます。問題は、dracRectを呼び出すたびにラグが発生し、すべての画像 (数千) を再描画することです。
すべての画像を再描画しない方法はありますか。つまり、すべての画像を保持して、描きたいものを描くということですか?
ありがとう、
setNeedsDisplayを指定してdrawRectを呼び出すたびに、膨大な量の画像が表示されます。問題は、dracRectを呼び出すたびにラグが発生し、すべての画像 (数千) を再描画することです。
すべての画像を再描画しない方法はありますか。つまり、すべての画像を保持して、描きたいものを描くということですか?
ありがとう、
すべての再描画を回避する 1 つの方法は、setNeedsDisplayInRect:
の代わりにを呼び出し、再描画setNeedsDisplay:
が必要な画像を含む四角形のみを渡すことです。もちろん、これはdrawRect
渡された四角形をもはや無視できないことを意味します。画像を調べて、画像が再描画される四角形と重なっているかどうかを確認してください。オーバーラップがない場合は、画像をスキップして再描画の CPU 時間を節約します。
これは、ビューを維持する非常に「手動」の方法であることに注意してください。など、iOS が提供するコンポーネントのいくつかを使用することを検討してくださいUICollectionView
。これにより、非常に少ないコードで画面に多くのものを表示できます。
ビューを異なるビュー (またはレイヤー) に分割します。これにより、システムはコンテンツをキャッシュして再描画を高速化できます。
ユースケースはわかりませんが、何百もの画像がある場合は、OpenGL の使用を検討します。