¿Puedo observar cuándo un UIViewController cambia la interfaz de orientación?

Si tengo un puntero a un UIViewController, ¿puedo notificarme cuando cambia interfaceOrientation sin modificar el código del controller?

¿Es mi mejor apuesta para detectar cambios en la orientación del dispositivo y luego ver si el UIViewController tendrá / ha rotado (d)?

Puede usar NSNotificationCenter:

  [[NSNotificationCenter defaultCenter] addObserver:self // put here the view controller which has to be notified selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object:nil]; - (void)orientationChanged:(NSNotification *)notification{ UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; //do stuff NSLog(@"Orientation changed"); } 

Puede usar el willAnimateRotationToInterfaceOrientation:duration: en su UIViewController y luego volver a colocar cualquier UIViews (o cualquier otro código) para paisaje o retrato. P.ej

 - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) { // change positions etc of any UIViews for Landscape } else { // change position etc for Portait } // forward the rotation to any child view controllers if requinetworking [self.rootViewController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration]; }