objective-c ios8 orientation

objective c - Detección de cambio de orientación iOS 8



objective-c ios8 (2)

Al ejecutarse en iOS 8, necesito cambiar la interfaz de usuario al rotar mi aplicación.

Actualmente estoy usando este código:

-(BOOL)shouldAutorotate { UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; if (orientation != UIInterfaceOrientationUnknown) [self resetTabBar]; return YES; }

Lo que hago es eliminar la interfaz de usuario actual y agregar una nueva interfaz de usuario adecuada a la orientación. Sin embargo, mi problema es que este método se llama aproximadamente 4 veces cada vez que se realiza una sola rotación.

¿Cuál es la forma correcta de hacer cambios en el cambio de orientación en iOS 8?


El viewWillTransitionToSize:withTransitionCoordinator: se llama inmediatamente antes de que la vista haya pasado al nuevo tamaño, como señala Nick. Sin embargo, la mejor manera de ejecutar el código inmediatamente después de que la vista haya pasado al nuevo tamaño es usar un bloque de finalización en el método:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { [coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> context) { // your code here }]; }

Gracias a esta respuesta por el código ya Nick por vincularlo en su comentario.


Timur Kuchkarov está en lo correcto, pero publicaré la respuesta ya que me perdí su comentario la primera vez que revisé esta página.

El método de iOS 8 para detectar cambios de orientación (rotación) está implementando el siguiente método del controlador de vista:

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { // Do view manipulation here. [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; }

Nota: la vista del controlador aún no ha cambiado a ese tamaño en este momento, así que tenga cuidado si su código de tamaño se basa en las dimensiones actuales de la vista.