Po prostu korzystam z Centrum powiadomień:
Dodaj zmienną orientacji (wyjaśnię na końcu)
//Above viewdidload
var orientations:UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation
Dodaj powiadomienie, gdy pojawi się widok
override func viewDidAppear(animated: Bool) {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "orientationChanged:", name: UIDeviceOrientationDidChangeNotification, object: nil)
}
Usuń powiadomienie, gdy widok zniknie
override func viewWillDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIDeviceOrientationDidChangeNotification, object: nil)
}
Pobiera aktualną orientację po wyzwoleniu powiadomienia
func orientationChanged (notification: NSNotification) {
adjustViewsForOrientation(UIApplication.sharedApplication().statusBarOrientation)
}
Sprawdza orientację (pionową / poziomą) i obsługuje zdarzenia
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
}
}
}
Powodem dodania zmiennej orientacji jest to, że podczas testowania na urządzeniu fizycznym powiadomienie o orientacji jest wywoływane przy każdym drobnym ruchu w urządzeniu, a nie tylko wtedy, gdy się obraca. Dodanie instrukcji var i if wywołuje kod tylko wtedy, gdy został przełączony na przeciwną orientację.
UIViewController
. Zobacz sekcję zatytułowaną „Obsługa