¿Cómo restaurar dinámicamente el nivel de zoom y la posición del UIScrollView cuando se reinicia mi aplicación?

StackOverflow https://stackoverflow.com/questions/654845

Pregunta

Mi aplicación consiste en un UIImageView dentro de un UIScrollView , y visualizo una imagen grande dentro de él. La vista de desplazamiento permite al usuario pellizcar para acercar / alejar la imagen, y parece que todo funciona bien.

Sin embargo, cuando mi aplicación finaliza y luego se reinicia, el UIScrollView muestra la imagen nuevamente en el nivel de zoom original (que actualmente está configurado para mostrar la imagen completa, al escalarla en un " ajuste de aspecto " modo).

Realmente me gustaría poder volver a iniciar mi aplicación y volver a abrir el UIScrollView con los mismos parámetros que se configuraron cuando la aplicación finalizó. Entonces, si mi imagen está actualmente ampliada al máximo y se desplaza hasta la parte inferior izquierda, esa debería ser la vista cuando abro la aplicación nuevamente.

¿Cómo puedo hacer esto?

¿Fue útil?

Solución

He encontrado una manera de ampliar mediante programación UIScrollView. Esto puede ayudarlo a establecer el nivel de zoom deseado al inicio.

El código de muestra, junto con la clase ZoomScrollView que encapsula la magia de zoom requerida y una discusión detallada de cómo (y por qué) funciona el zoom UIScrollView está disponible en github.com/andreyvit/ScrollingMadness/ .

Otros consejos

Verifique la propiedad .transform de la vista. Si está ampliado, esto debería modificarse. Guardar y restaurar en el próximo lanzamiento.

Alguien preguntó esto hace un tiempo, pero no creo que le guste la respuesta . Espero que tengas uno mejor.

Lo hago así: Cuando salga, guarde el zoomlevel (myScrollview.zoomScale) y el origen del marco de la vista de contenido.

Cuando vuelve a abrir, puede establecer la escala de zoom. También debe establecer el tamaño del contenido en el nuevo nivel de zoom, porque de lo contrario los límites no son correctos.

    [myScrollview setZoomScale:savedZoomScale];
    CGSize newsize = CGSizeMake(origsize.width * savedZoomScale, 
                                 origsize.height * savedZoomScale);
    myScrollview.contentSize = newsize;

Para establecer el desplazamiento:

[myScrollView setContentOffset:savedFrameOrigin animated:YES];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top