2011-08-09 20 views
2

私のアプリケーションでは、サブビューされたUIView(および他のいくつかの要素)を持つUIViewControllerがあります。私のdrawRect:メソッドでは、DrawViewと呼ばれるUIViewの中で、テーブルグリッド型のものを描画し、グリッド上にCGPointの配列をプロットします。ユーザーが画面をタップすると、touchesBegan:withEvent:が呼び出され、グリッド上の最も近い点がタッチされたことが確認され、drawRect:メソッドがポイントを描画する配列にポイントが追加され、[self setNeedsDisplay]が呼び出されます。ユーザーが画面上で指を動かすと、ポイントが最後の位置から変更されたかどうかがチェックされ、ポイントが更新され、必要に応じて[self setNeedsDisplay]が呼び出されます。Core Graphics- drawRect:頻繁に呼び出されない

これはSimulatorでうまくいきます。しかし、実際のiPhoneで実行すると、非常にゆっくりと実行されます。指を動かすと、ドットを描くには時間がかかります。別のスレッドにポイントを配置する場所の計算を実行すると、パフォーマンスが向上することがあります。誰もがこれを知っている経験をしていますか?遅れを減らすための他の提案はありますか?

答えて

4

遅延を減らすための他の提案はありますか?

はい。 -drawRect:は使用しないでください。これは長くて複雑な理由ですが、基本的にUIKitがUIViewサブクラスに-drawRect:を実装したと見なすと、レンダリングは本当に遅いソフトウェアベースのレンダリングパスを経由します。 CALayerのオブジェクトとコンポジットビューで描画すると、ハードウェアアクセラレーションされたグラフィックが表示され、アプリのFARのパフォーマンスが向上します。

+0

偉大な答え。しかし、どうやってそれをしますか?複数のサブレイヤがあるレイヤーまたは1つのビューを持つユーザー別のビュー –

+0

@Sandroでも動作しますが、CFタイプ(UIImageとCGImageRefなど)ではなくObjCタイプを扱うため、ジェスチャ認識機能を追加する可能性があるため、おそらく 'CALayers'の代わりに' UIView'オブジェクトを使用します。 –

+0

ありがとうございます。私は新鮮ですが、私はCALayerオブジェクトや複合ビューが何であるか全く分かりません。私は[AppleのCALayerのドキュメント](http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CALayer_class/Introduction/Introduction.html)を見つけましたが、あなたが推奨する他のチュートリアルやドキュメントがありますこれらのことについて学習し、それらを使って描く方法 –

関連する問題