2010-11-18 4 views
8

Ich habe ein UIScrollView mit einem UIImageView und ich habe einige Probleme, um das richtige Verhalten zu erhalten, wenn das iPhone rotiert.Bild skalieren, um Bildschirm auf iPhone Rotation passen

Ziel: Ich versuche folgende zu erhalten, wenn von Hoch- auf Querformat gehen:

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

Hier wird das gesamte Bild im Hochformat skaliert wird in der Landschaftsansicht passen, wenn das iPhone dreht. Es ist auch zentriert. Ich versuche auch, das Seitenverhältnis beizubehalten. Die Benutzerinteraktion ist ebenfalls aktiviert, und der Benutzer sollte den gesamten Bildschirm zum Schwenken/Zoomen des Bilds verwenden können.

Derzeit ist die folgende autoresizingMask auf der Scrollview Ich habe:

von der oberen linken Ecke
scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth | 
           UIViewAutoresizingFlexibleHeight);  

Aber dies gibt die folgende

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

Diese Einstellung bewahrt Skala und Offset.

Frage: Ist es möglich, dieses Verhalten mit geeigneten autoresizingMask zu erhalten? Wenn nicht, sollte man wohl

gesetzt
scrollView.autoresizingMask = UIViewAutoresizingNone; 

und manuell eingestellt zoomScale und contentOffset für die UIScrollView auf Rotation. Aber wo sollte das gemacht werden? Was ist mit der Animation dieser Veränderung?

Lösung: Durch sehr leicht Modifizieren der Antwort unten ich das obige Verhalten mit den Code unten bekam:

imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | 
            UIViewAutoresizingFlexibleHeight); 

scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth 
            | UIViewAutoresizingFlexibleHeight); 

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

Antwort

3

Versuchen Sie folgendes:

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

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

Ich bin mir nicht sicher, ob Die Bildansicht wird automatisch in der Größe eines UIScrollView angepasst. Wenn die Autoresierung nicht funktioniert, können Sie versuchen, den Rahmen selbst auf rotieren zu setzen, um der Größe des Scrollview zu entsprechen.

+1

Danke! Das war schnell. Um das richtige Verhalten zu bekommen, musste ich unseren Code leicht ändern (siehe oben), aber das brachte mich in die direkte Richtung. – user467225

+1

funktioniert überhaupt nicht –

-1

Ich hatte eine ähnliche Situation, eine sehr einfache scrollView mit 3 imageViews ('vorherige', 'aktuelle' und 'nächste'), um eine Reihe von Fotos anzuzeigen.

Die Fotos wurden alle für das iPad, aber eine Mischung aus Querformat und Hochformat ausgerichtet. Ich wollte, dass sie in den Bildschirm passen (d. H. Letterboxed, falls erforderlich), wobei das Seitenverhältnis beibehalten wird. Ich fand, dass ich nur das zu den 3 imageViews tun musste, damit es funktioniert:

imageView.contentMode = UIViewContentModeScaleAspectFit;