J'utilise simplement le centre de notification:
Ajouter une variable d'orientation (expliquera à la fin)
//Above viewdidload
var orientations:UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation
Ajouter une notification lorsque la vue apparaît
override func viewDidAppear(animated: Bool) {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "orientationChanged:", name: UIDeviceOrientationDidChangeNotification, object: nil)
}
Supprimer la notification lorsque la vue disparaît
override func viewWillDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIDeviceOrientationDidChangeNotification, object: nil)
}
Obtient l'orientation actuelle lorsque la notification est déclenchée
func orientationChanged (notification: NSNotification) {
adjustViewsForOrientation(UIApplication.sharedApplication().statusBarOrientation)
}
Vérifie l'orientation (portrait / paysage) et gère les événements
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 raison pour laquelle j'ajoute une variable d'orientation est que lors du test sur un appareil physique, la notification d'orientation est appelée à chaque mouvement mineur dans l'appareil, et pas seulement lors de sa rotation. L'ajout des instructions var et if n'appelle le code que s'il est passé à l'orientation opposée.
UIViewController
. Consultez la section intitulée «Gestion des rotations de vues». Elle explique ce que vous devez faire.