2010-11-18 4 views
8

J'ai un UIScrollView contenant un UIImageView et j'ai quelques problèmes pour obtenir le comportement correct lorsque l'iPhone tourne.Redimensionner l'image pour l'adapter à la rotation de l'iPhone

Objectif: Je suis en train 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 l'iPhone tourne. Il est également centré. J'essaie aussi de préserver le ratio d'aspect. L'interaction de l'utilisateur est également activée et l'utilisateur doit pouvoir utiliser l'intégralité de l'écran pour effectuer un panoramique ou un zoom sur l'image.

Actuellement, je donne les résultats suivants autoresizingMask sur la ScrollView:

scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth | 
           UIViewAutoresizingFlexibleHeight);  

Mais cela donne le

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

suivant Ce réglage conserve l'échelle et le décalage du coin supérieur gauche.

Question: Est-il obtenir ce comportement en utilisant autoresizingMask approprié? Dans le cas contraire, il faut probablement mettre

scrollView.autoresizingMask = UIViewAutoresizingNone; 

et régler manuellement zoomScale et contentOffset pour le UIScrollView sur la rotation. Mais, où cela devrait-il être fait? Qu'en est-il de l'animation de ce changement?

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

imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | 
            UIViewAutoresizingFlexibleHeight); 

scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth 
            | UIViewAutoresizingFlexibleHeight); 

imageView.contentMode = UIViewContentModeScaleAspectFit; 
scrollView.contentMode = UIViewContentModeCenter; 

Répondre

3

Essayez ceci:

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

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

Je ne suis pas sûr l'imageView sera automatiquement redimensionnée dans un UIScrollView, donc si l'autoresizing ne fonctionne pas, vous pouvez essayer de régler le cadre vous-même en le faisant pivoter pour égaler la taille de la scrollview.

+1

Merci! C'était rapide. Pour obtenir le comportement correct, j'ai dû changer légèrement notre code (voir ci-dessus), mais cela m'a mis dans la direction directe. – user467225

+1

Ne fonctionne pas du tout –

-1

J'ai eu une situation similaire, un scrollView très simple avec 3 imagesViews («précédent», «courant» et «suivant») pour afficher une série de photos.

Les photos étaient toutes dimensionnées pour l'iPad, mais avec un mélange d'orientations paysage et portrait. Je voulais qu'ils s'inscrivent dans l'écran, (c'est-à-dire en lettres capitales si nécessaire), avec un rapport d'aspect conservé. J'ai trouvé que j'avais seulement besoin de faire cela aux 3 images pour que ça fonctionne:

imageView.contentMode = UIViewContentModeScaleAspectFit; 
Questions connexes