Uso semplicemente il Centro notifiche:
Aggiungi una variabile di orientamento (spiegherà alla fine)
//Above viewdidload
var orientations:UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation
Aggiungi notifica quando viene visualizzata la vista
override func viewDidAppear(animated: Bool) {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "orientationChanged:", name: UIDeviceOrientationDidChangeNotification, object: nil)
}
Rimuovi notifica quando la visualizzazione scompare
override func viewWillDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIDeviceOrientationDidChangeNotification, object: nil)
}
Ottiene l'orientamento corrente quando viene attivata la notifica
func orientationChanged (notification: NSNotification) {
adjustViewsForOrientation(UIApplication.sharedApplication().statusBarOrientation)
}
Controlla l'orientamento (verticale / orizzontale) e gestisce gli eventi
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
}
}
}
Il motivo per cui aggiungo una variabile di orientamento è perché quando si esegue il test su un dispositivo fisico, la notifica di orientamento viene richiamata ad ogni piccola mossa nel dispositivo, e non solo quando ruota. L'aggiunta delle istruzioni var e if chiama il codice solo se è passato all'orientamento opposto.
UIViewController
. Vedi la sezione intitolata "Gestire le rotazioni della vista". Spiega cosa dovresti fare.