Enseñar distintas UIViews cuando se rota el iPhone o iPad

Autor: | Última modificación: 20 de septiembre de 2023 | Tiempo de Lectura: 1 minutos
Temas en este post:

UIViews

Aunque puedes crear una vista que se adapta a la orientación horizontal y vertical, no es nada sencillo el hacerlo en caso de tener una jerarquía de UIViews no trivial.  La posibilidad de enseñar vistas distintas dependiendo de la orientación es interesante por varias razones distintas:

  1. Tu vista es muy compleja y resulta imposible o muy difícil reaprovecharla en una orientación distinta.
  2.  Quieres aprovechar el mayor espacio horizontal en las orientaciones «landscape» para incluir nuevas caraterísticas. Un ejemplo es la calculadora de Apple que en horizontal se transforma en una calculadora científica, incorporando nuevos botones.
  3. Utilizas algún control que ocupa demasiado espacio en horizontal, como es el caso de UIPickerView.

Además de la calculadora de Apple, otra aplicación que utiliza esto de forma muy interesante es WeightBot de TapBots, que enseña  distintos gráficos según la orientación.

No sé cual será la solución que han buscado Apple y TapBots para esto, pero la mía ha sido de crear un nuevo controlador de controladores, es decir, un controlador que controla a otros sub-controladores, como UINavigationController.

FRRRotatingViewController tiene 2 subcontroladores y su inicializador designado es:

-(FRRRotatingViewController *) 
   initWithLandscapeViewController: (UIViewController *) landscape 
         andPortraitViewController: (UIViewController *) portrait;

Para detectar la rotación, observa la notificación UIDeviceOrientationDidChangeNotification  y en el método que registra para dicha notificación procede a cambiar la vista.