A continuación encontrarás traducido al Castellano el artículo escrito originalmente por Geoff Perlman (Fundador y CEO de Xojo), y publicada originalmente en el Blog oficial de Xojo.
Las aplicaciones para dispositivos móviles requieren ajustar habitualmente su interfaz de usuario cuando el usuario gira el dispositivo, ya sea desde su posición vertical a horizontal o viceversa. En la mayoría de los casos Xojo se encarga de hacerlo de forma automática. En el caso de los proyectos Android, y si tienes bloqueados correctamente los controles (mientras que en los proyectos iOS debes de definir correctamente los constraints), los controles se encargarán de reubicarse correctamente a medida que se gire el dispositivo.
En el caso de que exista algo que necesites hacer desde el código cuando se modifica la orientación del dispositivo, entonces estás de suerte. La clase MobileScreen dispone del evento OrientationChanged. Cuando dicho evento se dispara, esto significa que el usuario ha rotado su dispositivo y la orientación ha cambiado. Aquí es donde probablemente quieras incluir el código encargado de ejecutarse cuando se produzca un cambio en la orientación del dispositivo.
Nota: Si necesitas saber si la pantalla ha cambiado de tamaño, entonces te resultará útil el evento Resized (al menos en iOS, aún no está soportado en Android).
Lo que puede no resultar intuitivo u obvio de forma inmediata es que rotar el dispositivo no implica que haya cambiado la orientación. Considera el siguiente proyecto de ejemplo que muestra cuando tienen lugar los eventos Resized y OrientationChanged en una tabla. Si bien dicho ejemplo es para iOS, este funciona de la misma forma también en el caso de Android (exceptuando el evento Resized). El dispositivo comienza en modo vertical.
Nos centraremos por ahora en los eventos OrientationChanged. Este obtiene un evento OrientationChanged inicial. Luego, el usuario rota su teléfono en el sentido de las agujas del reloj lo suficiente como para que cambie la orientación de vertical a horizontal.
Puedes ver que se lanza un nuevo evento OrientationChanged, tal y como podrías esperar. Luego, el usuario rota de nuevo el teléfono siguiendo el sentido de las agujas del reloj.
Ahora el teléfono está hacia abajo. Observa sin embargo que, desde la perspectiva del sistema operativo, no ha cambiado su orientación. El diseño sigue aún con la orientación horizontal. No se trata de un bug. El dispositivo no soporta el modo vertical cuando el dispositivo está hacia abajo. Por tanto, el diseño aun se encuentra con la orientación horizontal y no se lanza el evento OrientationChanged porque no se ha producido ningún cambio en la orientación.
A continuación el usuario rota el teléfono nuevamente siguiendo el sentido de las agujas del reloj.
Podrías pensar que dicha acción disparará el evento OrientationChanged, pero no es así. ¿Por qué no? Porque desde el punto de vista del sistema operativo, el diseño aun está con la orientación horizontal (o apaisada, si lo prefieres). No ha cambiado su orientación. Por último, el usuario gira de nuevo el dispositivo en el sentido de las agujas del reloj por última vez.
En esta ocasión, la orientación ha cambiado de horizontal a vertical y, por tanto, se dispara el evento OrientationChanged. Dado que el evento OrientationChanged inicial se disparó cuando se ejecutó la app, de las rotaciones de 90 grados sólo se han producido dos cambios en la orientación y, así, sólo se dispara el evento OrientationChanged en dos ocasiones.
Este es uno de esos casos en los que algo que inicialmente parece intuitivo… resulta que es erróneo hasta que observas con más detalle lo que está ocurriendo en realidad.