我正在开发一个使用 GLKit 完成渲染的游戏。为了节省一些创建 UI 布局的工作,我使用 Interface Builder 和 UIKit 视图来管理某些界面元素的显示/隐藏和交互。
最近我进行了一些结构更改,导致在 GL 视图顶部包含我的按钮覆盖的两个全屏视图,这损害了某些较慢设备(例如 iPhone 4 和第 4 代 iPod Touch)上的渲染帧速率。我这样做是为了更容易使用现有的 IB/UIKit 架构一次显示/隐藏完整的控制布局。
老的:
|-Root (GLKView)
| |-Buttons
新的:
|-Root (GLKView)
| |-Layout 1
| | |-Buttons 1
| |-Layout 2
| | |-Buttons 2
(Etc...)
叠加层(布局 1、2、...、n)是完全透明的,包含一些子视图(按钮 1、2、...、n),屏幕边缘带有图像和文本。当视图是根视图的直接后代时,覆盖这几个按钮和事物的开销并没有那么糟糕,但是中间有一个额外的透明视图似乎增加了我的性能,因为我的帧率下降了很多。
我有哪些减少开销的选择?叠加层中没有动画或任何事情发生,所以我认为他们不应该重绘超过他们需要的内容,它可能只是额外的 alpha 混合全屏叠加层正在削弱我的表现。
我每帧都在我的所有 UIView 上设置hidden
属性,而不检查它们是否已更改,这会导致视图被标记为需要重绘吗?
将所有这些按钮转换为 OpenGL 绘图是可能的,因为我没有使用 iOS 的原生控件,如 UIButtons 和 UISwitches(只是带有图像和标签的 UIViews),但如果可以的话,我想避免它。