Weiß jemand, ob es eine Möglichkeit gibt, Autorotation des iPhone programmatisch für nur eine Ansicht zu sperren? Ich möchte etwas Hilfe mit semi-transculent Sicht, aber ich möchte nur Querformat-Orientierung unterstützen, auch alle anderen Ansichten können sich drehen. Also möchte ich die Rotation sperren, wenn diese Ansicht oben ist.
tnx
EDIT: Weitere Details: ein UIController hat 7 UIView ... und ich möchte die Autorotation nur sperren, wenn die letzte oben auftritt.
Diese Frage wurde vor über einem Jahr gestellt, aber die akzeptierte Methode ist jetzt in iOS 6 veraltet , wenn jemand dies in iOS 6 tun möchte, dann müssen Sie supportedInterfaceOrientations auf dem obersten Controller verwenden.
Stellen Sie sich vor, Sie haben ein Setup wie dieses ...
... dann müssen Sie die Methode supportedInterfaceOrientations auf der Registerkarte Controller festlegen.
Erstellen Sie eine Unterklasse des Tab-Bar-Controllers (oder des Navigations-Controllers, wenn dieser ganz oben ist) und legen Sie diese Methoden fest ...
%Vor%... dann können Sie in Ihren individuellen View-Controllern die gewünschten Eigenschaften einstellen ...
%Vor%Sie können es an das Fenster anhängen. Nachdem die Ansicht geladen wurde, machen Sie
%Vor% Entfernen Sie es, wenn Sie diese Ansicht verlassen. Wahrscheinlich in viewWillDisappear:
oder viewDidDisappear:
.
Ich denke, dass es viele spezifische Antworten gibt, die nur zeitweise funktionieren, aber keine gibt Aufschluss darüber, welche Auswirkungen oder Nebeneffekte in Bezug auf den Rest der App oder andere View-Controller bestehen, wenn der Benutzer das Telefon nach außen kippt den View-Controller, für den Sie die Ausrichtung für ...
steuern möchtennachdem Sie damit herumgespielt haben, können Sie (wie ich) erkennen, dass unerwünschte oder unerwünschte Ergebnisse auftreten können (dh Orientierungsänderungen treten auf, wenn Sie das nicht wollen oder umgekehrt).
Meine Haupterkenntnis beinhaltete, dass nur der 'root view controller' 'shouldAutorotate' aufruft, und NICHT irgendeinen einzelnen View-Controller, mit dem Sie versuchen, ihn zu überschreiben.
Bei dieser Erkenntnis schien es ziemlich schwierig zu sein, eine bestimmte Ausrichtung für einen bestimmten View-Controller zu "sperren".
(das heißt, vc_A muss immer Porträt sein und darf nicht in die Landschaft wechseln, während vc_B immer Landschaft ist und nicht zum Hochformat wechseln darf)
nachdem ich dies bestätigt habe, ist der folgende Algorithmus, der mir geholfen hat, nur auf bestimmten View-Controllern zu rotieren.
Setup:
Zuerst müssen Sie die gewünschten Ausrichtungen zulassen, entweder in der Datei info.plist oder in der Hauptprojekteinstellung (diese Ausrichtungen sind die einzigen, die Sie in Ihrem Code verwenden können)
code:
1) In meinem Root-View-Controller (hier: MasterViewController) habe ich eine BOOL-Eigenschaft (allowAutorotate) angegeben, die verwendet wird, wenn 'shootAutorotate' aufgerufen wird.
2) machen den Root-View-Controller auch zu einem Singleton, so dass er von jedem anderen Kind-View-Controller leicht zugänglich ist (ohne dass Referenzen umgangen werden müssen).
Hinweis: Sie können auch das Beobachter / Benachrichtigungsmuster oder Delegierung oder ein anderes Muster verwenden, aber für mich war das Singleton-Muster am einfachsten
3) Fügen Sie den Delegaten hinzu '- (BOOL) sollteAutorotate' und verwenden Sie die BOOL allowAutorotate für die Rückgabe
4) Erstellen Sie eine Instanzmethode 'setInterfaceOrientation'. Einige andere Klassen rufen diese Methode in ihrer 'viewDidLoad' und / oder ihrer 'viewWillDisappear'
auf %Vor%5) schließlich in einer anderen Klasse den Root-View-Controller und rufen Sie 'setInterfaceOrientation' entsprechend
auf %Vor%Notizen:
1) Das Ergebnis dieses Beispiels sollte sein, dass die App zuerst im Hochformat geladen wird. Wenn Sie dann 'SomeViewController' laden, wird es in Querformat geändert, und wenn Sie es entfernen, wird es wieder in Hochformat
2) es funktioniert so ...
Jedes Mal, wenn Sie das Telefon physisch neigen, wird der Delegate 'shouldAutorotate' aufgerufen (nur vom 'root view controller'),
auch jedes Mal, wenn Sie das Telefon programmatisch kippen
%Vor%Der Delegat 'shouldAutorotate' wird aufgerufen.
Dies ist, warum wir zuerst 'allowAutorotate = YES;', dann 'das Telefon kippen', dann 'allowAutorotate = NO;'
Daher haben wir das Ergebnis, dass wir die Orientierungsänderung nur einmal, programmatisch, genau dann, wenn wir wollen, zulassen / durchführen.
glhf!
Tags und Links objective-c iphone