Estoy haciendo una aplicación simple para el iPad que consiste en una imagen gigante que puede acercarse/alejarse y navegar.UIImageView/UIScrollView forzando una relación de aspecto fija para adaptarse a la pantalla
Esta imagen se coloca dentro de UIImageView
, que luego se coloca dentro de UIScrollView
.
La navegación y el zoom funcionan 100% bien; sin embargo, la imagen se carga en una relación de aspecto fija para adaptarse a la pantalla, y nunca cambiará (incluso cuando amplía).
Tengo la sensación de que Interface Builder está estableciendo algunas propiedades que no conozco, pero he intentado todo lo que se me ocurre para solucionarlo.
El problema:
Cuando la aplicación inicialmente cargas, el contenido dentro de la UIScrollView
es de nuevo automáticamente de tamaño para caber exactamente la pantalla iPad por tener su relación de aspecto changed./fixed; la imagen real es gigante (mucho más grande que la resolución del iPad). Esta proporción de aspecto escalado permanece incluso cuando se acerca la imagen, y hace que la imagen parezca estirada.
No importa lo que intente, no puedo evitar que el iPad vuelva a escalar automáticamente mi imagen. Simplemente quiero que la aplicación comience con mi imagen mostrada normalmente (100% de zoom) en el iPad, con la parte que actualmente cabe en la pantalla del iPad como la esquina superior izquierda de la imagen.
Lo que he tratado de solucionarlo:
He intentado cambiar el contenido en modo UIImageView's
en Interface Builder a "superior izquierda". Esto pareció funcionar perfectamente, pero luego me di cuenta de que el UIScrollView
no le permitía desplazarse por la imagen más allá de la porción mostrada inicialmente (arriba a la izquierda). Puede hacer un acercamiento en la parte superior izquierda y desplazarse, pero nunca más allá de lo que se mostró inicialmente en la pantalla.
Código:
Aquí está el código que estoy usando para configurar los puntos de vista. imageScrollView
es el UIScrollView
, y imageView
es el UIImageView
. Ambos son IBOutlets
.
// Set the needed attributes of the imageView
[imageView setImage:[UIImage imageNamed: @"TestImage.png"]];
imageView.userInteractionEnabled = YES;
// Set a bunch of the imageScrollView attributes.
// calculate minimum scale to perfectly fit image width, and begin at that scale
float minimumScale = [imageScrollView frame].size.width/[imageView frame].size.width;
[imageScrollView setMinimumZoomScale:minimumScale];
[imageScrollView setZoomScale:1];
[imageScrollView setMaximumZoomScale:10];
[imageScrollView setContentSize:CGSizeMake(imageView.frame.size.width, imageView.frame.size.height)];
[imageScrollView setScrollEnabled:YES];
[imageScrollView setUserInteractionEnabled:YES];
imageScrollView.clipsToBounds = YES;
imageScrollView.bounces = FALSE;
imageScrollView.bouncesZoom = FALSE;
También tienen dos UIGestureRecongizers
de manejar grifo de zoom, pero no creen que ellos son el problema. Cuando los comento, nada cambia.
Cualquier ayuda sería extremadamente apreciado.
Estaba experimentando este problema después de cerrar ChildBrowser donde la vista principal dejó de desplazarse. Usé este truco para restaurar mi desplazamiento en la vista principal. – user357086
Me alegro (y algo triste) de ver que después de ~ 2 años el truco aún funciona, y es aplicable a otros problemas. Estaba usando iOS4 cuando tuve este problema, así que pensé que ya lo habrían solucionado ... – AlexFZ
@ user357086 Estoy teniendo el mismo problema. ¿Puedes explicarnos un poco más sobre cómo aplicaste esto en ChildBrowser? – wakeup