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"); } }]; }