Sprites werden häufig zum Rendern von interaktiven Widgets in einem sogenannten Handling the Heads-Up-Display (HUD) verwendet. Die Handhabung der Mausinteraktion kann eine lästige Aufgabe sein, wenn Sie kein UIFramework haben, auf dem Sie stehen können.

Wenn Sie eine 3D-Anwendung entwickeln und sich nach UIKit sehnen, sollten Sie diese nicht sofort ablehnen.

Es stimmt, dass das Mixen von UIKit und OpenGL ES aus Performance-Gründen generell unklug ist, aber in vielen Situationen ist es der richtige Weg. Dies gilt insbesondere für 3D-Anwendungen, die nicht so grafisch anspruchsvoll sind wie große, professionell produzierte Spiele.

OpenGL ES UIKit

Denken Sie daran, dass alle OpenGL-Renderings in einer von UIView abgeleiteten Klasse stattfinden. Jedes Beispiel definiert eine Klasse mit der Bezeichnung GLView zu diesem Zweck. Das Hinzufügen einiger einfacher Steuerelemente zu GLView ist ziemlich schmerzlos, also lassen Sie uns versuchen, ein UISegmentedControl hinzufügen, das einen Texturverkleinerungsfilter auswählt.

Zuerst müssen wir ein Feld zur GLView-Klassendeklaration für das neue Steuerelement hinzufügen.

Copy to Clipboard

Als nächstes müssen wir das Control instanziieren und eine Methode zur Ereignisbehandlung erstellen.

Copy to Clipboard

Beispiel 7-18 enthält einige UIKit- und Objective-C-Mechanismen, die wir noch nie zuvor gesehen haben (z.B. @selector), aber es wird den iPhone-Entwicklern bekannt sein.

Beachten Sie, dass Sie UIKit auch zum Rendern von „Look-alike“-Steuerelementen verwenden können, anstatt die eigentlichen UIKit-Steuerelemente zu verwenden. Beispielsweise können Sie beim Start einige Buttons in ein CGImage rendern und daraus eine OpenGL-Textur erstellen. Dies würde ihren Buttons das Aussehen und die Haptik der nativen Benutzeroberfläche des iPhones verleihen und es würde nicht unter den potentiellen Performance-Problemen leiden, die mit dem Mischen des eigentlichen UIKit-Steuerlements mit OpenGL verbunden sind. Der Nachteil ist, dass Sie die Interaktivität von Hand implementieren müssen.