Ich habe benutzerdefinierte Split-View-Controller in meiner App mit einem Master-Controller und einem detaillierten Controller.Unterstützung verschiedener Ausrichtungen in iOS 6.0 für verschiedene View-Controller
- (id)initWithMasterController:(UIViewController*)aMasterController
detailedController:(UIViewController*)aDetailedController;
Die für den Master-Controller und den Details-Controller bereitgestellten Controller sind UINavigationController.
Im Rahmen meiner App, gibt es zwei mögliche Fälle zur Orientierung Handhabung:
- Wenn sechs Kombination von Controllern in Master und Details Controller verwendet werden, werden alle Orientierungen für die App unterstützt werden.
- Wenn ein StudentDetailsViewController allein am Detail-Controller vorhanden ist, können nur zwei mögliche Ausrichtungen unterstützt werden. (Landschaft)
Wann immer die Ausrichtung des Geräts geändert wird, passieren die folgenden Dinge in Versionen unter iOS 6,0
Die
-shouldAutorotateToInterfaceOrientation:
Methode aufgerufen wird. Die Implementierung dieser Methode ist unten: Zur Laufzeit leite ich die Anfrage an den Master-Controller und den Detail-Controller mit dem gleichen Aufruf weiter.- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { BOOL res = [masterController shouldAutorotateToInterfaceOrientation:interfaceOrientation] && [detailedController shouldAutorotateToInterfaceOrientation:interfaceOrientation]; return res; }
Die
-shouldAutorotateToInterfaceOrientation
des masterController wird TRUE zurück. Die Implementierung der Methode in StudentViewController ist unten.- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (IS_IPAD) ? UIInterfaceOrientationIsLandscape(interfaceOrientation) : UIInterfaceOrientationIsPortrait(interfaceOrientation); }
Die Fähigkeit, Informationen über die neue Ausrichtung zu erhalten geändert werden soll, hilft mir zu entscheiden, ob eine Drehung oder nicht aktiviert werden.
Mit iOS 6.0:
Wann immer die Ausrichtung des Geräts geändert wird, werden die folgenden Dinge passieren in Versionen von iOS 6,0
Verfahren
-shouldAutorotate
des geteilten View-Controller wird aufgerufen. Seine Umsetzung ist unter- (BOOL)shouldAutorotate { BOOL res = [masterController shouldAutorotate] && [detailedController shouldAutorotate]; return res; }
Die detailedController der shouldAutorotate die Navigation nennt. Die Implementierung von autorotate Funktion in StudentsController:
- (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return (UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight); }
Aber mit iOS 6.0, ich bin nicht in der Lage, die Orientierung zu steuern. Auch wenn die Methode supportedInterfaceOrientations aufgerufen wird, wenn die Methode sentAutorotate des StudentsDetailsController von der Methode shouldAutorotate von detailsController aufgerufen wird, folgt shouldAutorotateMethod nicht den in der Methode supportedInterfaceOrientations erwähnten Optionen.
UPDATE:
las ich die Dokumentation und die unten Noten werden in der document zur Verfügung gestellt.
manchmal möchten Sie vielleicht die automatische Rotation dynamisch deaktivieren. Für Beispiel könnten Sie dies tun, wenn Sie die Rotation für eine kurze Zeit vollständig unterdrücken möchten. Sie müssen die Ausrichtungsänderungen vorübergehend deaktivieren, wenn Sie die Position der Statusleiste manuell steuern möchten (z. B. beim Aufruf der Methode setStatusBarOrientation: animated: ).
Wenn Sie die automatische Drehung vorübergehend deaktivieren möchten, vermeiden Sie , um die Ausrichtungsmasken zu manipulieren. Überschreiben Sie stattdessen die Methode shouldAutorotate auf dem obersten View-Controller. Diese Methode wird vor dem Ausführen einer Autorotation aufgerufen. Wenn NEIN zurückgegeben wird, wird die Rotation unterdrückt.
Kann die automatische Drehung basierend auf der aktuellen Ausrichtung vorübergehend deaktiviert werden?
Die Code-Formatierung nicht korrekt durchgeführt werden konnte .. – Krishnan
Sie das Problem gelöst haben? Ich habe das gleiche Problem und kann nicht herausfinden, wie man das sowohl für ios5 als auch 6 – Stas
behandelt. Nein, ich habe es nicht gelöst .. – Krishnan