2011-01-11 4 views
3

Ich habe UIKit die Gerätedrehung für mich behandeln lassen (meine iOS-App hat eine UIViewController, die shouldAutorotateToInterfaceOrientation: implementiert) und ich war ziemlich glücklich mit wie einfach es war, alles funktioniert zu bekommen.Lassen UIKit Device Rotation in OpenGLES 1.1 - ist es tatsächlich etwas langsamer, und wenn ja, unter welchen Umständen?

Ich habe inzwischen gesagt, dass dies langsamer ist, als alle Rotationsgeschäfte manuell zu erledigen. Dies wurde von meinen Tests jedoch weder auf einem iPad (iOS 4.2) noch auf einem iPod Touch 2G (auch iOS 4.2) bestätigt.

Ich war ein wenig überrascht zu sagen, dass es einen großen Unterschied auf jeden Fall geben würde, wenn man bedenkt, wie UIKit zu funktionieren scheint, sieht es nicht so aus, als gäbe es Spielraum für OpenGLES. So muss -[EAGLContext presentRenderbuffer:] ziemlich viel eine Kopie machen, die im Grunde die gleiche Zeit unabhängig vom Drehungszustand nimmt. Der Overhead der anderen Aspekte der Rotation (allgemeine Koordinatentransformationen, hauptsächlich) würde ich mir ebenso wenig vorstellen.

Das ist nur meine Vermutung, und ich habe nur meine lügenden Augen, um es zu unterstützen! Gibt es also Fälle, in denen UIKit die Gerätedrehung handhaben kann, was wirklich einen großen Unterschied macht? Wenn ja, was sind sie?

+0

ich gerade hatte mich gefragt, ich habe versucht, zu Erhalte shouldAutorotateToInterfaceOrientation, um mit meiner OpenGL ES 1.1 App zu arbeiten. Wo fügst du die Funktion hinzu? Es macht nichts, wenn es zu EAGLView hinzugefügt wird. Ich habe eine Symbolleiste, die ich automatisch drehen möchte. Irgendwelche Vorschläge wären großartig. Vielen Dank. – Davido

+1

Eine Frage an sich. Kurz gesagt: Diese Funktion muss auf Ihrem View-Controller ausgeführt werden, nicht auf der Ansicht. Leiten Sie Ihren View-Controller von 'UIViewController' ab. Überladen Sie '- (void) loadView' und legen Sie Ihr Widget-Erstellungskram hinein. Rufen Sie '- [UIViewController initWithNibName: bundle:]' von Ihrer Init-Funktion auf. Erstellen Sie dann aus der Funktion "applicationDidFinishLaunching" Ihres Anwendungsdelegaten den View-Controller, anstatt die Widgets dort zu erstellen. Sieht so aus, als ob das System den Rest erledigt. –

Antwort

1

Verwenden von View-Controllern zur Handhabung der Rotation ist die beste und empfohlene Lösung auf den folgenden Geräten: iPhone 3GS, iPhone 4, iPad, iPad 2, iPod touch 3G, iPod touch 4G mit iOS 4.2 und höher.

Wenn Ihre Anwendung auf einem älteren iOS-Gerät ausgeführt wird, sollten Sie die Rotation direkt mit OpenGL ES durchführen. Zufälligerweise sind die Geräte, auf denen dies empfohlen wird, alle Geräte, die OpenGL ES 2.0 unterstützen und somit ihre OpenGL ES 1.1-Pipelines mit Shadern implementiert haben.

Wenn Sie mehr Informationen über mögen, wie die Rotation auf nicht-ES-2.0-Geräte oder Bestätigung dieser Antwort zu handhaben, werden Sie feststellen, dass here.

Verwandte Themen