2011-01-22 2 views
0

OpenGL ESビューでiOSアプリケーションを作成しています。 3Dビューの上に、私はCocoa Touchを使用してさまざまなGUIビットを描画します。CPU負荷が高いUIView再描画(iOS)

これはフレームレートが良好であれば問題なく動作します。しかし、CPUの負荷が高くなると(GLESビューが20-ish FPSに低下)、次のUIKit表示サイクルが進んでいるようです。

具体的には、さまざまなUIViewサブクラスに基づいてツールチップビューを表示しようとしています。表示するときは、ツールチップのラベルのテキストを更新し、その背景をサイズ変更し、メインUIViewのhiddenをNOに設定し、setNeedsDisplayとsetNeedsLayoutを呼び出します。

フレームレートが低い(CPU負荷が高い)場合、次の表示サイクルは無期限にプッシュされるようです。しかし、直ちにCPU負荷が低下すると、ビューは期待どおりに表示されます。

私の3Dエンジンの再描画の間にUIKitで描画サイクルを引き起こす方法はありますか?他のアイデア?

答えて

0

iPhoneでは、特に指定がない限り、すべてのアプリケーションが1つのスレッドでUI描画とロジックを実行します。

あなたは別のスレッドにあなたの3D描​​画コードを移動することができます:http://developer.apple.com/library/iOS/#documentation/Cocoa/Reference/Foundation/Classes/NSThread_Class/Reference/Reference.html

+0

すべてのロジックと1つのスレッドで実行されている図面(彼らは私のアプリで行うもの)大丈夫です:

[NSThread detachNewThreadSelector:@selector(3DRenderingMethod) toTarget:self withObject:nil] 

をここでは、関連するドキュメントがあります。ポイントは、高いCPU負荷は、私が間違いなくメインスレッドをブロックしていなくても、UIKitの再描画を無期限に進めるようです。 UIKitは、CPU負荷が高いときに意図的に再描画をスキップしているようです。これは私が特定の場合に防ぐことです。 – Simplex

関連する問題