2010-11-18 13 views
8

Tengo un UIScrollView que contiene un UIImageView y tengo algunos problemas para obtener el comportamiento correcto cuando el iPhone gira.Escala de la imagen para ajustar la pantalla en la rotación del iPhone

Objetivo: Estoy tratando de obtener la siguiente cuando se pasa de vertical a horizontal:

_________ 
|AAAAAAA| 
|BBBBBBB|   _________________ 
|CCCCCCC|   |  AAAAAA  | 
|DDDDDDD| --> |  CCCCCC  | 
|EEEEEEE|   |  EEEEEE  | 
|FFFFFFF|   |_____GGGGGG_____| 
|GGGGGGG| 
--------- 

Aquí toda la imagen en la vista vertical se escala para caber en la vista horizontal cuando el iPhone gira. También está centrado. También estoy tratando de preservar la relación de aspecto. La interacción del usuario también está activada, y el usuario debe poder usar toda la pantalla para desplazar/ampliar la imagen.

Actualmente tengo el siguiente autoresizingMask en el ScrollView:

scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth | 
           UIViewAutoresizingFlexibleHeight);  

Pero esto dicta la siguiente

_________ 
|AAAAAAA| 
|BBBBBBB|   _________________ 
|CCCCCCC|   |AAAAAA   | 
|DDDDDDD| --> [BBBBBB   | 
|EEEEEEE|   [CCCCCC   | 
|FFFFFFF|   [DDDDDD__________| 
|GGGGGGG| 
--------- 

Esta configuración conserva escala y desplazamiento desde la esquina superior izquierda.

Pregunta: ¿Es posible obtener este comportamiento utilizando adecuada autoresizingMask? Si no es así, uno debe fijar probablemente

scrollView.autoresizingMask = UIViewAutoresizingNone; 

y configurar manualmente zoomScale y contentOffset para la UIScrollView en la rotación. Pero, ¿dónde debería hacerse eso? ¿Qué tal animar ese cambio?

Solución: Modificando ligeramente por debajo de la respuesta que me dieron el comportamiento anterior usando el código de abajo:

imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | 
            UIViewAutoresizingFlexibleHeight); 

scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth 
            | UIViewAutoresizingFlexibleHeight); 

imageView.contentMode = UIViewContentModeScaleAspectFit; 
scrollView.contentMode = UIViewContentModeCenter; 

Respuesta

3

Prueba esto:

scrollView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | 
          UIViewAutoresizingFlexibleHeight);  
imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | 
          UIViewAutoresizingFlexibleHeight); 

imageView.contentMode = UIViewContentModeAspectFit; // You could also try UIViewContentModeCenter 

no estoy seguro de si el imageView se redimensionará automáticamente dentro de UIScrollView, por lo tanto, si el aumento de tamaño no funciona, puede intentar configurar el marco usted mismo para rotar para igualar el tamaño de la vista de desplazamiento.

+1

¡Gracias! Eso fue rápido. Para obtener el comportamiento correcto tuve que cambiar un poco nuestro código (ver arriba), pero esto me puso en la dirección directa. – user467225

+1

No funciona en absoluto –

-1

Tuve una situación similar, un scrollView muy simple con 3 imageViews ('anterior', 'actual' y 'siguiente') para mostrar una serie de fotos.

Las fotos fueron todas del tamaño para el iPad, pero una combinación de orientaciones de paisaje y retrato. Quería que encajaran en la pantalla (es decir, en recuadro si fuera necesario), con la relación de aspecto retenida. Descubrí que solo tenía que hacer esto en las 3 imageViews para que funcione:

imageView.contentMode = UIViewContentModeScaleAspectFit; 
Cuestiones relacionadas