同様の答えであるhereとhereで説明しているように、OpenGL ESコンテンツは、特定のUIViewをバックアップするCAEAGLLayer内でホストされます。このUIViewは、表示階層内の他のビューと同様に動作します。そのため、UILabelsやその他のコントロールを上に追加することも、このビューをオーバーレイする兄弟として追加することもできます。
インターフェイスビルダを使用してUIをレイアウトする場合、そのインターフェイスのどこかにOpenGL ESコンテンツを含むビューが必要です。このUIViewのサブビューとしてUILabelをInterface Builderに追加して、それを表示させることができます(黒のOpenGL ESの背景に黒のテキストが表示されないようにテキストを適切に色付けすることを忘れないでください)。また、OpenGL ESのホスティングビューで-addSubview:
を使用して、プログラムでこれを行うこともできます。
私のテストでは、OpenGL ESのコンテンツにUIKitコントロールを重ねると、レンダリング速度がわずかに低下します(アプリケーションでは1〜5%)。これは実行可能なアプローチです。
この例を実際に見たい場合は、Moleculesアプリケーションのソースコードを参照してください。このアプリケーションは、iPhone上のOpenGL ESコンテンツにオーバーレイされたラベルやその他のコントロールを使用します。
私は同意しません。私のテストでは、OpenGL-ESを含むビューの上にオーバーレイされたUIViewを追加すると、レンダリングのパフォーマンスが約5%低下します。私はいつも非常に良い性能を発揮する私のアプリケーションの1つでそれをやります。一方、非不透明なOpenGL ESコンテンツをUIKit要素の上に置くのは遅いですが、ここで尋ねられることはありません。この場合、OpenGL ESでフルテキストシステムを実装する必要はなく、相当量のコードが必要になります。 –