iOS: Cómo ejecutar una función después de que el dispositivo haya girado (Swift)
Tengo una UIView que no está usando Diseño automático y algunos componentes se muestran en función de su porcentaje de coordenadas X e Y de la vista principal.
Anteriormente habría ejecutado una función para actualizar sus posiciones en didRotateFromInterfaceOrientation sin embargo, veo que esto ahora está obsoleto en iOS8.
He echado un vistazo a Viewwilltransitiontotsize pero está dando resultados extraños, y no parece haber una función Viewdidtransitiontotsize.
Hay un manera fácil (en Swift) para ejecutar una función después de la rotación de un dispositivo?
3 answers
El viewWillTransitionToSize
el método delegado se llama con un UIViewControllerTransitionCoordinator
objeto conforme. Un método que protocol declara es animateAlongsideTransition(_:animation, completion:)
. Puede usarlo para que el código se ejecute después de que se complete la transición.
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
coordinator.animateAlongsideTransition(nil, completion: {
_ in
// Your code here
})
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-18 10:22:37
Anterior respuesta https://stackoverflow.com/a/26944087/6583492 {[3] } tiene toda la razón, gracias a Acey y Moonwalkr. Pero para swift 3.0 se verá como el siguiente
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
coordinator.animate(alongsideTransition: nil) { _ in
// Your code here
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:33:24
Aunque no se pide aquí la versión del objetivo 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");
}
}];
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-21 12:56:02