Escala la imagen a la pantalla de ajuste de la rotación iPhone
-
26-09-2019 - |
Pregunta
tengo un UIScrollView que contiene un UIImageView y tengo algunos problemas para conseguir el comportamiento correcto al girar el 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|
---------
A continuación, toda la imagen en la vista vertical se escala para caber en la vista horizontal al girar el iPhone. También está centrado. También estoy tratando de conservar la relación de aspecto. La interacción del usuario también está activado, y el usuario debe ser capaz de utilizar toda la pantalla a la cacerola / acercar o alejar la imagen.
Actualmente tengo el siguiente autoresizingMask
en el ScrollView:
scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
Pero esto da la siguiente
_________
|AAAAAAA|
|BBBBBBB| _________________
|CCCCCCC| |AAAAAA |
|DDDDDDD| --> [BBBBBB |
|EEEEEEE| [CCCCCC |
|FFFFFFF| [DDDDDD__________|
|GGGGGGG|
---------
Esta escala conservas de ajuste y desplazamiento desde la esquina superior izquierda.
Pregunta:
¿Es posible obtener este comportamiento utilizando autoresizingMask
adecuada? Si no es así, uno debe fijar probablemente
scrollView.autoresizingMask = UIViewAutoresizingNone;
y manualmente conjunto zoomScale
y contentOffset
para la UIScrollView en la rotación. Sin embargo, cuando esta se debe hacer? ¿Qué pasa con la animación de ese cambio?
Solución: Modificando ligeramente por debajo de la respuesta que me dieron el comportamiento anterior usando el siguiente código:
imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth
| UIViewAutoresizingFlexibleHeight);
imageView.contentMode = UIViewContentModeScaleAspectFit;
scrollView.contentMode = UIViewContentModeCenter;
Solución
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 conseguirá redimensionada automáticamente dentro de un UIScrollView, por lo que si el cambio de tamaño automático no funciona, usted podría tratar de establecer el marco de sí mismo en rotación para igualar el tamaño de la ScrollView.
Otros consejos
Yo tenía una situación similar, un muy simple ScrollView con 3 imageViews ( 'anterior', 'corriente' y 'siguiente') para mostrar una serie de fotos.
Las fotos fueron dimensionados para el IPAD, sino una mezcla de paisaje y retrato orientaciones. Quería que encajan en la pantalla, (es decir letterboxed si es necesario), la relación de aspecto retenido. Me di cuenta de que sólo se necesitaba hacer esto a los 3 imageViews para que funcione:
imageView.contentMode = UIViewContentModeScaleAspectFit;