Ios UIButton 与 OpenGL 的子类化

Posted

技术标签:

【中文标题】Ios UIButton 与 OpenGL 的子类化【英文标题】:Ios UIButton subclassing with OpenGL 【发布时间】:2011-10-09 04:55:49 【问题描述】:

是否可以创建 UIButton 的子类来在 OpenGL ES 中绘制按钮?到目前为止,我有一个仅使用 OpenGL ES 的游戏应用程序,出于性能和美学原因,我不想在此之上添加复合 UIkit 元素。再说一次,我真的不想实现对矩形的触摸命中测试,因为要正确地做到这一点,就像苹果对内部和外部矩形所做的那样,以及各种状态转换是相当多的代码。我真正想要的是让 UIButton 进行所有的触摸状态更改,但不进行绘图,同时允许我使用 OpenGL 以及我的所有其余绘图代码自己在各种状态下绘制按钮。有关如何进行的任何建议或代码示例?

【问题讨论】:

实际上,我发现将 UIKit 与 OpenGL 混合并没有我认为的性能那么糟糕。我问这个问题是因为我只想一次性绘制所有按钮作为纹理的一部分,我更新每一帧并让 UIKit 只进行命中测试。如果有办法让 UIKit 什么都不画,但仍然很好地给我回电,因为我会感兴趣。 【参考方案1】:

我发现这个问题的一个答案是使用 UIButton 但使用自定义样式。然后,如果您没有为按钮状态设置实际图像,它根本不会绘制任何东西,但仍然可以通过在您提供的矩形中检测到所需的操作时回调您来充当按钮。通过这种方式,您可以将 GLES 纹理区域作为按钮激活。当按钮被触摸或释放时,无论有没有动作,您都可以获得回调,如果需要,您可以自己更新纹理以响应这些回调。但是最后我没有这样做,而是按照正常的 UIKit 使用使用带有图像的自定义按钮。在 OpenGL ES 之上使用 UIKit,我没有发现我的应用程序有任何过度减速。

【讨论】:

以上是关于Ios UIButton 与 OpenGL 的子类化的主要内容,如果未能解决你的问题,请参考以下文章

iOS支持图文混排的按钮(UIButton)

iOS 中 UIBUTTON 的操作

iOS 增加 UITableViewCell 中 UIButton 的触控区域

UIButton 上的 iOS NSAttributedString

如何覆盖 Xamarin.IOS UIButton 的 LayoutSublayersOfLayer 行为?

iOS·UIButton如何文字在下图片在上