Comment restaurer dynamiquement le niveau et la position de zoom de UIScrollView lorsque mon application est relancée?

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

Question

Mon application consiste en un UIImageView à l'intérieur d'un UIScrollView , et j'affiche une grande image à l'intérieur. La vue par défilement permet à l’utilisateur de pincer pour effectuer un zoom avant / arrière sur l’image, et tout semble bien fonctionner.

Toutefois, lorsque mon application est fermée, puis relancée, UIScrollView réaffiche l'image dans le niveau de zoom d'origine (qui est actuellement défini pour afficher toute l'image, en la redimensionnant Mode "bon ajustement".

J'aimerais vraiment pouvoir relancer mon application et faire rouvrir UIScrollView avec les mêmes paramètres que ceux définis lors de la fermeture de l'application. Donc, si mon image est actuellement zoomée au maximum et défilée jusqu'en bas à gauche, cela devrait être la vue lorsque j'ouvre à nouveau l'application.

Comment puis-je faire cela?

Était-ce utile?

La solution

J'ai trouvé un moyen de zoomer par programme sur UIScrollView. Cela peut vous aider à définir le niveau de zoom souhaité au démarrage.

L'exemple de code, ainsi que la classe ZoomScrollView qui encapsule la magie de zoom requise et une discussion détaillée sur le fonctionnement (et pourquoi) du zoom UIScrollView est disponible à l'adresse github.com/andreyvit/ScrollingMadness/ .

Autres conseils

Vérifiez la propriété .transform de la vue. Si vous faites un zoom avant, cela devrait être modifié. Enregistrez-le et restaurez-le au prochain lancement.

Quelqu'un a posé cette question il y a quelque temps, mais je ne pense pas que vous aimerez la réponse . J'espère que vous en obtiendrez un meilleur.

Je le fais comme ça: Lorsque vous quittez, enregistrez le niveau de zoom (myScrollview.zoomScale) et l’origine du cadre contentview.

Lorsque vous rouvrez, vous pouvez définir l’échelle de zoom. Vous devez également définir la taille du contenu sur le nouveau niveau de zoom, car sinon les limites ne sont pas correctes.

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

Pour définir le décalage:

[myScrollView setContentOffset:savedFrameOrigin animated:YES];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top