Pregunta

Este es solo un ejemplo del problema básico que estoy teniendo, así que no te preocupes si esta situación suena un poco inútil;)

Digamos que tengo una aplicación que es principalmente un UINavigationController de solo dos niveles de profundidad. El nivel superior es una tabla con una lista de nombres de archivos de imágenes, y el segundo nivel tiene solo un UIImageView que muestra la imagen del nombre de archivo que tocó.

Para una aplicación como esta, ¿alguien sabe una buena manera de permitir que la tabla en el nivel superior se autorregule mientras se mantiene fijo el segundo nivel de imágenes en modo vertical?

Hasta ahora casi he podido llegar ... pero cuando toco un nombre de archivo mientras estoy en modo horizontal, la imagen se desliza a la vista en la orientación incorrecta, incluso si el controlador de vista de segundo nivel debeAutorotateToInterfaceOrientation devuelve sí solo para retrato modos.

¿Fue útil?

Solución

El problema es que si usa la rotación automática, toda la interfaz de usuario (incluida la instancia de UIWindow, creo) se gira.

Todo lo que se introduzca en el controlador de navegación en este punto se hará en horizontal.

Entonces, cuando empujas la vista de imagen, eso es exactamente lo que obtienes.

Para que esto funcione, debe:

  1. Manejar la rotación de la vista raíz manualmente (usando una transformación)
  2. Desrota la vista de imagen por -PI / 2 usando una transformación.

De cualquier manera, debe realizar las transformaciones manualmente para que esto funcione.

Como nota al margen, esto puede ser un mal diseño de la interfaz de usuario. Como usuario, esperaría a medida que profundice para que las imágenes aparezcan al derecho. Pero esto es sin conocer el contexto exacto de su aplicación.

Otros consejos

No había una buena manera de hacer esto en iPhone OS 2.x, pero en 3.0, lo han mejorado dramáticamente.

En 2.x, el método de delegado shouldAutorotateToInterfaceOrientation: solo se obedecía para cambios en la orientación, por lo que obtendría el comportamiento que describe: si se rotó en otro controlador de vista, permanecería rotado a través de empujes y estallidos incluso si el nuevo controlador de vista no admitiera la rotación a esa orientación.

En 3.0, UINavigationController sondea shouldAutorotateToInterfaceOrientation: en cada pulsación o pop y obedece lo que devuelve de la forma esperada, por ejemplo: si actualmente está girado en orientación horizontal izquierda, y presiona una instancia de un controlador de vista que solo admite la orientación vertical a través de shouldAutorotateToInterfaceOrientation: , voltea automática e instantáneamente la orientación lógica y se desliza en la nueva vista de la manera correcta en orientación vertical.

Tenga en cuenta que esto solo funcionará en aplicaciones vinculadas con (y, por lo tanto, que requieren) 3.0. Para aplicaciones vinculadas a 2.x, emulará el comportamiento anterior.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top