如何在OpenGL ES 2.0应用程序中放置UILabel?

时间:2011-06-21 14:15:20

标签: iphone ios cocoa-touch opengl-es opengl-es-2.0

我有一个适用于iPad的OpenGL ES 2.0应用程序。是否可以使用UILabel在屏幕上放置文本,就像在传统的iOS应用程序中一样?

我尝试插入标签,但没有显示出来。如果有可能,有人可以解释这个过程吗?我们应该在viewcontroller.xib文件或mainwindow.xib文件中插入标签,还要在哪里写入适当的代码?

2 个答案:

答案 0 :(得分:10)

正如我在类似的答案herehere中解释的那样,您的OpenGL ES内容托管在支持特定UIView的CAEAGLLayer中。此UIView的行为与显示层次结构中的任何其他视图类似,因此您可以在其上添加UILabel和其他控件,或者作为覆盖此视图的兄弟姐妹。

如果您使用Interface Builder来布局UI,那么您应该拥有一个包含该界面中某处的OpenGL ES内容的视图。您可以在界面生成器中将UILabel添加为此UIView的子视图,并让它显示(记住要正确地为文本着色,这样就不会在黑色OpenGL ES背景上获得黑色文本)。您也可以在OpenGL ES托管视图上使用-addSubview:以编程方式执行此操作。

在我的测试中,在OpenGL ES内容上覆盖UIKit控件只会导致渲染速度略有下降(在我的应用程序中为1-5%),因此这是一种可行的方法。

如果您想查看此操作的示例,请查看我的Molecules应用程序的源代码,该应用程序使用覆盖在iPhone上的OpenGL ES内容上的标签和其他控件。

答案 1 :(得分:0)

仅在标签位于OpenGL内容之上时才这样做。 UIKit元素有时与OpenGL元素不能很好地混合。在UIKit元素之上混合使用OpenGL内容和透明度非常慢。在这些情况下,最好在OpenGL代码中添加标签。静态文本非常简单,只需绘制面向相机的平面对象和文本的纹理图像。动态文本需要更多工作来使用字体调整纹理以显示正确的文本。

要执行此操作,请将标签添加到viewcontroller.xib文件,而不是mainwindow.xib文件。用于控制UILabel的适当代码将放在视图控制器的.h和.m文件中。在标准的Xcode iOS OpenGL ES Application模板中,主视图控制器的.xib文件将包含一个EAGLView视图。标签可以添加到该视图中,并连接到视图控制器的.h文件中的IBOutlet。