Eu simplesmente uso a Central de notificações:
Adicione uma variável de orientação (explicarei no final)
//Above viewdidload
var orientations:UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation
Adicionar notificação quando a visualização for exibida
override func viewDidAppear(animated: Bool) {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "orientationChanged:", name: UIDeviceOrientationDidChangeNotification, object: nil)
}
Remover notificação quando a visualização for embora
override func viewWillDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIDeviceOrientationDidChangeNotification, object: nil)
}
Obtém a orientação atual quando a notificação é acionada
func orientationChanged (notification: NSNotification) {
adjustViewsForOrientation(UIApplication.sharedApplication().statusBarOrientation)
}
Verifica a orientação (retrato / paisagem) e lida com 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
}
}
}
A razão pela qual adiciono uma variável de orientação é porque, ao testar em um dispositivo físico, a notificação de orientação é chamada a cada pequeno movimento no dispositivo, e não apenas quando ele gira. Adicionar as instruções var e if apenas chama o código se ele mudou para a orientação oposta.
UIViewController
. Veja a seção intitulada "Manipulando Rotações de Visualização". Ela explica o que você deve fazer.