gpt4 book ai didi

ios - 如何减少覆盖在 GL View 上的 UIKit 元素的渲染开销?

转载 作者:行者123 更新时间:2023-11-29 04:23:42 26 4
gpt4 key购买 nike

我正在开发一款使用 GLKit 进行渲染的游戏。为了节省创建 UI 布局的一些工作,我使用 Interface Builder 和 UIKit View 来管理某些界面元素的显示/隐藏和交互。

最近,我进行了一些结构更改,导致两个全屏 View 在 GL View 之上包含了我的按钮叠加层,这损害了某些速度较慢的设备(例如 iPhone 4 和第四代 iPod Touch)上的渲染帧速率。我这样做是为了更轻松地使用现有的 IB/UIKit 架构一次性显示/隐藏完整的控件布局。

旧的:

|-Root (GLKView)
| |-Buttons

新:

|-Root  (GLKView)
| |-Layout 1
| | |-Buttons 1
| |-Layout 2
| | |-Buttons 2
(Etc...)

覆盖层(布局 1, 2, ..., n)是完全透明的,包含一些 subview (按钮 1, 2, ..., n),图像和文本位于屏幕边缘。当 View 是 Root View 的直接后代时,覆盖这几个按钮和其他东西的开销并没有那么糟糕,但是中间有一个额外的透明 View 似乎削弱了我的性能,因为我的帧速率下降了很多。

我有哪些选项可以减少开销?叠加层中没有动画或发生任何事情,所以我认为他们不应该重新绘制超过需要的内容,而且可能只是额外的 alpha 混合全屏叠加层削弱了我的性能。

我在每帧的所有 UIView 上设置 hidden 属性,而不检查它们是否已更改,这是否会导致 View 被标记为需要重绘?

将所有这些按钮转换为 OpenGL 绘图是可能的,因为我没有使用 iOS 的 native 控件,如 UIButtons 和 UISwitches(只是带有图像和标签的 UIViews),但如果可以的话,我想避免它。

最佳答案

成本从 OpenGL View 向上产生,而不是从按钮向下产生;当它发生变化时,上面的所有内容都需要重新组合。

因此,就实际解决方案而言,放弃布局 View 并使用 IBCollection 来代替怎么样?您肯定希望仅在实际更改时推送隐藏标志的更改,以避免数组迭代,但您会获得与以前相同的总体合成成本。

所以你会声明类似的内容:

@property(retain) IBOutletCollection(UIView) NSArray *viewsInLayout1;

然后,您可以在界面设计器中将其连接到任意多个 View 。随后,在代码中,您将拥有可以迭代的数组 viewsInLayout1 (或在可能的情况下使用 makeObjectsPerformSelector:)来区分一组与另一组,而无需对所有分组进行硬编码在这个地方。

关于ios - 如何减少覆盖在 GL View 上的 UIKit 元素的渲染开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12649081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com