2010-01-12 7 views
16

Was sind eine Animation mit einem und zwei Ebenen zum Drehen eines iPhone-Fensters?Einstufige vs Zweistufige Animation für iPhone Apps?

Dies ist die "Fehler" Nachricht, die ich in der Debugger-Konsole bekommen (nichts stürzt):

Using two-stage rotation animation. To use the smoother single-stage animation, this application must remove two-stage method implementations. 

Ich wurde durch das Buch arbeiten "Beginning iPhone Entwicklung: Exploring the iPhone SDK" von Apress (Dave Mark , Jeff LaMarche) über das Swap-Projekt.

Antwort

15

Alles wird in der UIViewController Class Reference erklärt. Vor allem die View Rotation Abschnitt in der Nähe der Spitze.

Aus dem Referenz:

Handhabung Ansicht Rotationen

standardmäßig die UIViewController Klasse zeigen Ansichten in nur Portrait-Modus. Um zusätzliche Orientierungen zu unterstützen, müssen Sie die shouldAutorotateToInterfaceOrientation: Methode überschreiben und YES für beliebige Ausrichtungen zurückgeben, die Ihre Unterklasse unterstützt. Wenn die Autoresizing-Eigenschaften Ihrer Ansichten richtig konfiguriert sind, kann das alles sein, was Sie tun müssen. Die UIViewController-Klasse bietet jedoch zusätzliche Hooks, mit denen Sie nach Bedarf zusätzliche Verhaltensweisen implementieren können: .

So deaktivieren Sie vorübergehend Funktionen, die nicht benötigt werden oder sonst verursachen Probleme bei der Orientierung ändern, können Sie die willRotateToInterfaceOrientation:duration: Methode außer Kraft setzen und die notwendigen Aktionen dort auszuführen. Sie können dann die didRotateFromInterfaceOrientation: Methode überschreiben und sie verwenden, um diese Funktionen wieder zu aktivieren, sobald die Orientierungsänderung abgeschlossen ist.

Wenn Sie benutzerdefinierte Animationen während einer Ausrichtung ändern möchten, können Sie dies in einer von zwei Möglichkeiten tun. Orientierungsänderungen, die an verwendet werden, treten in zwei Schritten auf, wobei Benachrichtigungen am Anfang, Mitte, und Endpunkten der Drehung auftreten. In iPhone OS 3.0 wurde die Unterstützung jedoch hinzugefügt, um die Ausrichtung Änderungen in einem Schritt durchzuführen. Die Verwendung einer einstufigen Orientierungsänderung neigt dazu, schneller zu sein als das ältere zweistufige Verfahren und ist und wird generell für jeden neuen Code empfohlen.

So fügen Sie Animationen für ein einstufiges Orientierungsänderung, überschreiben die willAnimateRotationToInterfaceOrientation:duration: Methode und führen Sie Ihre Animationen dort. Um die älteren zweistufigen Methode zu verwenden, außer Kraft setzen eine oder beide der willAnimateFirstHalfOfRotationToInterfaceOrientation:duration: und willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration: Methoden, um Ihre Animationen vor jedem Schritt zu konfigurieren.Sie müssen nur eine Technik wählen und nur die Methoden überschreiben, die mit dieser Technik verbunden sind. Wenn Sie die Methode mit der zweistufigen Methode überschreiben, verwendet der View-Controller standardmäßig diese Methode .

+2

Leider hilft das nicht. Ich verwende keine der Orientierungsfunktionen und dieser Fehler tritt immer noch auf. Scheint ein Fehler in OS4 zu sein. – typeoneerror

+0

Diese Antwort ist richtig für einige Situationen, aber nicht für andere. Sicher, dieser Abschnitt in der Dokumentation erklärt den Fehler NICHT vollständig - es gibt spezifische Fehler in Apples UIImagePickerController/presentModalController, die diese Fehlermeldung auslösen (und die sie NICHT auslösen sollte). Immer noch versuchen, einen Workaround zu finden :(. – Adam

+0

@ Adam: http://StackOverflow.com/Questions/2878947/getting-using-two-stage-Rotation-Animation-warning-with-uiImagepickerController – geon

3

Ich habe von Methode zu willAnimateRotationToInterfaceOrientation:duration: Methode und Warnung gegangen.

Danke.

1

Ed Martys Antwort ist die richtige. Der Grund, warum es passiert, wenn Sie keine der Rotationsanimationen überschreiben, ist wahrscheinlich, dass Sie "YES" auf shouldAutorotate .. für eine Ansicht antworten. Wenn Sie die Rotation überhaupt nicht implementieren, sollten Sie die Methode shootAutorotate .. nicht überschreiben. Wenn Sie diese Methode überschreiben, überschreiben Sie einfach auch die Einzelschrittrotationsmethode und übergeben Sie sie an den Super.

3

ich die Täter in meinem Fall gefunden habe, der UIImagePickerController (I auch jede Drehung Animation nicht überschreiben) zu sein:

[self PresentModalViewController: imagePicker animiert: YES];

Ersetzen von imagePicker durch einen generischen UIViewController generiert keine Warnungen.

+0

Ich habe das gleiche Problem für UIImagePickerController Gibt es eine andere Möglichkeit, den Fehler zu entfernen, ohne ihn in UIViewController zu ändern? – karim

+1

Wie haben Sie die Parameter des UIImagePickerController mit einem UIViewController ?? – Joze

1

Wenn Sie iOS 4 verwenden und diese Warnung erhalten, habe ich einen Weg gefunden, es loszuwerden. In Ihrer info.plist gibt es ein Element namens "Supported interface orientations". Wählen Sie, welche Ausrichtungen Ihre Anwendung unterstützt und zweistufige Warnungen verschwinden, wenn Sie den imagePicker aufrufen.

1

@plumiscles Antwort funktionierte nicht ganz für mich - es gab kein Element namens 'Supported Interface Orientations', wahrscheinlich ist es ein altes Projekt. Aber man kann den gleichen Effekt durch Bearbeiten der .plist-Datei direkt und das Hinzufügen dieser:

<key>UIInterfaceOrientation</key> 
    <string>UIInterfaceOrientationPortrait</string> 
0

ich nicht über war eine dieser zweistufigen Funktionen reiten, aber ich war meine eigene Funktion aufrufen, wenn ich orientationChanged empfangen Benachrichtigungen, und ich hatte diese Codezeile darin. Durch das Auskommentieren wurde die Warnung gelöscht und die automatische Drehung wurde ordnungsgemäß ausgeführt. Auto rotieren funktionierte noch mit dieser Codezeile bis iOS 4.2, dann brach es komplett. Ich habe viel Zeit darauf verwendet, herauszufinden, warum der eingebaute autoRotate in 4.2 nicht mehr funktioniert. Vielleicht hilft das jemand anderem.

diese Zeile kommentiert heraus, damit es funktioniert:
[[UIApplication sharedApplication] setStatusBarOrientation:currentOrientation animated:YES];

1

UIImagePickerController als Subview hinzuzufügen brauchen diese Fehler von plist „Unterstützte Schnittstelle Orientierungen“ row

[self.view addSubview:picker.view]; 
[self presentModalViewController:picker animated:NO]; 
0

Ich lösche habe zu lösen und die Warnung verschwindet.

0

Ich hatte gerade das gleiche Problem. In meinem Fall war ein dummer Fehler, den ich hier anbringe, nur für den Fall, dass jemand anderes in dieselbe Sache fällt.

In meiner Anwendung mit Tabs entferne ich einen der ursprünglichen ViewControllers und fügte einen neuen mit Storyboard hinzu, um einen Abschnitt "Einstellungen" zu erstellen.

Diese neue VC musste eine VC mit Tabellenansicht sein und sogar ich entwarf, kompilierte und führte es problemlos aus, als ich die Ausrichtung der App änderte, bekam ich diesen Fehler "Zweistufige Rotationsanimation".

Mein Problem war, dass ich vergessen habe, in der ursprünglichen .h Dateischnittstelle "UIViewController" für "UITableViewController" zu ändern.

Sobald dies getan wurde, habe ich auf der Storyboard Identity Badge die Klasse aus dem allgemeinen Wert zu meinem SettingsViewController geändert und das war das Ende davon.

Ich hoffe, es kann jemand anderem helfen. Es hat eine Weile gedauert, bis ich das erreicht hatte.

Cheers,

1

ich dieses Problem hatte nach einer TabBarController ohne View-Controller innen (ohne Tabs) zu schaffen, verschwand diese Warnung einmal angebracht ich zumindest einen View-Controller zu.