Simplemente uso el Centro de notificaciones:
Agregue una variable de orientación (se explicará al final)
//Above viewdidload
var orientations:UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation
Agregar notificación cuando aparezca la vista
override func viewDidAppear(animated: Bool) {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "orientationChanged:", name: UIDeviceOrientationDidChangeNotification, object: nil)
}
Eliminar notificación cuando la vista desaparece
override func viewWillDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIDeviceOrientationDidChangeNotification, object: nil)
}
Obtiene la orientación actual cuando se activa la notificación
func orientationChanged (notification: NSNotification) {
adjustViewsForOrientation(UIApplication.sharedApplication().statusBarOrientation)
}
Comprueba la orientación (retrato / paisaje) y gestiona los eventos.
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
}
}
}
La razón por la que agrego una variable de orientación es porque al probar en un dispositivo físico, la notificación de orientación se llama en cada movimiento menor en el dispositivo, y no solo cuando gira. Agregar las declaraciones var y if solo llama al código si cambia a la orientación opuesta.
UIViewController
. Consulte la sección titulada "Manejo de rotaciones de vista". Explica lo que debe hacer.