iOS8 Métodos de rotation de interfaz no llamados

Como willAnimateRotationToInterfaceOrientation:duration: está en desuso en iOS8, es necesario usar viewWillTransitionToSize:withTransitionCoordinator: lugar .

Sin embargo, este método no recibe llamadas en mi controller de vista en iOS8. ¿Hay algo más, necesito implementar, para que esta callback funcione?

No puedo encontrar nada en la documentation. Lo único que pude encontrar fue que pertenece al nuevo protocolo UIContentContainer . Sin embargo, incluso si lo agrego explícitamente a los protocolos de mi controller, no funciona.

¿Algunas ideas?

El viewWillTransitionToSize:withTransitionCoordinator: parece que solo funciona si la interfaz realmente va a cambiar de tamaño, lo que significa que hemos girado 90 grados. Si tiene una máscara en su layout que solo permite el paisaje, al girar 180 grados, el tamaño de la interfaz no cambia, por lo que parece que este método no se llama.

He trabajado alnetworkingedor de esto en mi aplicación al registrarme en la notificación UIDeviceOrientationDidChangeNotification como:

(En mi vista viewWillAppear del controller):

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil]; [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

(En mi opinión, viewWillDisappear [recuerde cancelar la suscripción])

 [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]; 

Mi deviceOrientationDidChange: ve así:

 - (void)deviceOrientationDidChange:(NSNotification *)notification { UIInterfaceOrientation orientation = [[UIApplication shanetworkingApplication] statusBarOrientation]; [self willRotateToInterfaceOrientation:orientation duration:1.0]; } 

Según los documentos , restring llamar a super

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

De lo contrario, los controlleres de vista secundarios no recibirán el post reenviado a ellos.

Sé que esta pregunta es un poco vieja en este punto, pero creo que el problema podría resolverse de una manera diferente para algunos que puedan encontrarlo. Si está intentando cargar una vista que forma parte de un controller DIFERENTE utilizando addSubview(controller.view) , también debe agregar ese controller al padre también (posiblemente la vista que está agregando al controller). Si no agrega el controller a un padre, nunca recibirá las actualizaciones para los cambios de tamaño. Más tarde descubrimos el motivo del cambio API de Apple; con iPad Pro, tu SizeClass puede cambiar sin rotation con la habilidad de multitarea. Esto también llamará al método:

 viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) 

En la class padre, si anula el método anterior, asegúrese de llamar a super también o simplemente encontrará otra forma de golpear su cabeza contra una panetworking …