Question

J'ai un UIScrollView contenant un UIImageView et j'ai quelques problèmes pour obtenir le comportement correct lors de la rotation de l'iPhone.

Objectif: J'essaie d'obtenir ce qui suit lors du passage du mode portrait au paysage:

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

Ici, l'image entière dans le mode portrait est mis à l'échelle pour tenir dans la vue du paysage lorsque le iPhone tourne. Il est également centré. Je tente aussi de préserver le ratio d'aspect. l'interaction de l'utilisateur est également, et l'utilisateur doit être en mesure d'utiliser tout l'écran pour effectuer un panoramique / agrandir l'image.

À l'heure actuelle, j'ai le autoresizingMask suivant sur le ScrollView:

 scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth |
                               UIViewAutoresizingFlexibleHeight);       

Mais cela donne les éléments suivants

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

Ce paramètre conserve l'échelle et le décalage du coin supérieur gauche.

Question: Est-il possible d'obtenir ce comportement en utilisant autoresizingMask approprié? Dans le cas contraire, il faut sans doute mettre

 scrollView.autoresizingMask = UIViewAutoresizingNone;

et manuellement ensemble zoomScale et contentOffset pour le UIScrollView lors de la rotation. Mais, où devrait-il faire? Qu'en est-il animant ce changement?

Solution: En modifiant très légèrement la réponse ci-dessous, je suis le comportement ci-dessus en utilisant le ci-dessous le code:

imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
                                     UIViewAutoresizingFlexibleHeight);

scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth 
                                     | UIViewAutoresizingFlexibleHeight);

imageView.contentMode = UIViewContentModeScaleAspectFit;
scrollView.contentMode = UIViewContentModeCenter;
Était-ce utile?

La solution

Essayez ceci:

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

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

Je ne sais pas si le imageView va se redimensionnées automatiquement dans un UIScrollView, donc si le Autoresizing ne fonctionne pas, vous pouvez essayer de régler le cadre vous-même sur rotate pour égaler la taille du scrollview.

Autres conseils

J'ai eu une situation similaire, un très simple ScrollView avec 3 imageViews ( 'précédent', 'en cours' et 'suivant') pour afficher une série de photos.

Les photos ont été tous dimensionnées pour l'iPad, mais un mélange d'orientations paysage et portrait. Je voulais qu'ils entrent dans l'écran (à savoir letterboxed si nécessaire), avec un rapport d'aspect retenu. J'ai trouvé que je ne devais le faire pour les 3 imageViews pour que cela fonctionne:

imageView.contentMode = UIViewContentModeScaleAspectFit;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top