GLKitを使用してレンダリングを行うゲームに取り組んでいます。UIレイアウトの作成作業を節約するために、Interface BuilderビューとUIKitビューを使用して、特定のインターフェイス要素の表示/非表示と相互作用を管理しています。
最近、構造を変更して、GLビューの上にボタンオーバーレイを含む2つのフルスクリーンビューを作成しました。これにより、iPhone4や第4世代iPodTouchなどの低速デバイスでのレンダリングフレームレートが低下しました。これは、既存のIB / UIKitアーキテクチャを使用して、フルコントロールレイアウトを一度に表示/非表示にするのを簡単にするために行いました。
年:
|-Root (GLKView)
| |-Buttons
新しい:
|-Root (GLKView)
| |-Layout 1
| | |-Buttons 1
| |-Layout 2
| | |-Buttons 2
(Etc...)
オーバーレイ(レイアウト1、2、...、n)は完全に透明で、画面の端に画像とテキストを含むいくつかのサブビュー(ボタン1、2、...、n)が含まれています。ビューがルートビューの直接の子孫である場合、これらのいくつかのボタンや物をオーバーレイするためのオーバーヘッドはそれほど悪くはありませんでしたが、フレームレートが大幅に低下したため、中央に余分な透明なビューがあると、パフォーマンスが低下したようです。
オーバーヘッドを減らすためにどのようなオプションがありますか?オーバーレイにはアニメーションや何かが起こっていないので、必要以上に再描画するべきではないと思います。パフォーマンスを低下させているのは、追加のアルファブレンドされたフルスクリーンオーバーレイである可能性があります。
hidden
すべてのUIViewのプロパティを、変更されているかどうかを確認せずにフレームごとに設定していますが、その結果、ビューに再描画が必要であるというフラグが立てられる可能性がありますか?
UIButtonsやUISwitches(画像とラベルを含むUIViewsのみ)などのiOSのネイティブコントロールを使用していないため、これらすべてのボタンをOpenGL描画に変換することは可能ですが、可能であれば避けたいと思います。