iOS: comment exécuter une fonction après la rotation du périphérique (Swift)

J'ai un UIView qui n'utilise pas Auto-Layout et certains composants sont affichés en fonction de leur pourcentage de coordonnées X et Y de la vue principale.

Auparavant, j'aurais lancé une fonction pour mettre à jour leurs positions dans didRotateFromInterfaceOrientation mais je vois que cela est maintenant obsolète dans iOS8.

J'ai jeté un oeil à viewWillTransitionToSize mais il donne des résultats bizarres, et il ne semble pas y avoir une fonction viewDidtransitionToSize.

Existe-t-il un moyen facile (dans Swift) d'exécuter une fonction après une rotation de périphérique?

La méthode delegue viewWillTransitionToSize est appelée avec un object conforme UIViewControllerTransitionCoordinator . Une méthode animateAlongsideTransition(_:animation, completion:) ce protocole est animateAlongsideTransition(_:animation, completion:) . Vous pouvez l'utiliser pour que le code s'exécute une fois la transition terminée.

 override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) coordinator.animateAlongsideTransition(nil, completion: { _ in // Your code here }) } 

Ci-dessus, la réponse https://stackoverflow.com/a/26944087/6583492 a absolument raison, grâce à Acey et Moonwalkr. Mais pour 3.0 rapide il ressemblera à ce qui suit

 override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransition(to: size, with: coordinator) coordinator.animate(alongsideTransition: nil) { _ in // Your code here } } 

Bien que pas demandé ici Version Objective C:

 - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { // change any properties on your views } completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; if( UIDeviceOrientationIsPortrait(orientation) ) { NSLog(@"portrait"); } else { NSLog(@"landscape"); } }]; }