Ich benutze einfach das Benachrichtigungscenter:
Fügen Sie eine Orientierungsvariable hinzu (wird am Ende erklärt)
//Above viewdidload
var orientations:UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation
Benachrichtigung hinzufügen, wenn Ansicht angezeigt wird
override func viewDidAppear(animated: Bool) {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "orientationChanged:", name: UIDeviceOrientationDidChangeNotification, object: nil)
}
Benachrichtigung entfernen, wenn die Ansicht nicht mehr angezeigt wird
override func viewWillDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIDeviceOrientationDidChangeNotification, object: nil)
}
Ruft die aktuelle Ausrichtung ab, wenn eine Benachrichtigung ausgelöst wird
func orientationChanged (notification: NSNotification) {
adjustViewsForOrientation(UIApplication.sharedApplication().statusBarOrientation)
}
Überprüft die Ausrichtung (Hoch- / Querformat) und behandelt Ereignisse
func adjustViewsForOrientation(orientation: UIInterfaceOrientation) {
if (orientation == UIInterfaceOrientation.Portrait || orientation == UIInterfaceOrientation.PortraitUpsideDown)
{
if(orientation != orientations) {
println("Portrait")
//Do Rotation stuff here
orientations = orientation
}
}
else if (orientation == UIInterfaceOrientation.LandscapeLeft || orientation == UIInterfaceOrientation.LandscapeRight)
{
if(orientation != orientations) {
println("Landscape")
//Do Rotation stuff here
orientations = orientation
}
}
}
Der Grund, warum ich eine Orientierungsvariable hinzufüge, ist, dass beim Testen auf einem physischen Gerät die Orientierungsbenachrichtigung bei jeder kleinen Bewegung im Gerät aufgerufen wird und nicht nur, wenn es sich dreht. Durch Hinzufügen der Anweisungen var und if wird der Code nur aufgerufen, wenn in die entgegengesetzte Ausrichtung gewechselt wurde.
UIViewController
. Siehe den Abschnitt mit dem Titel "Umgang mit