2010-11-18 5 views
8

Ho un UIScrollView contenente un UIImageView e ho qualche problema a ottenere il comportamento corretto quando l'iPhone ruota.Ridimensiona l'immagine per adattarla alla rotazione dell'iPhone

Obiettivo: Sto cercando di ottenere la seguente quando si passa da verticale a orizzontale:

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

Qui l'intera immagine nella vista ritratto è scalata per adattarsi nella vista paesaggio quando l'iPhone ruota. È anche centrato. Sto anche cercando di preservare le proporzioni. Anche l'interazione dell'utente è attiva e l'utente dovrebbe essere in grado di utilizzare l'intero schermo per eseguire il pan/zoom dell'immagine.

Attualmente ho il seguente autoresizingMask sul ScrollView:

scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth | 
           UIViewAutoresizingFlexibleHeight);  

Ma questo ha pronunciato la seguente

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

Questa impostazione preserva scala e l'offset dall'angolo in alto a sinistra.

Domanda: E 'possibile ottenere questo comportamento usando adatto autoresizingMask? In caso contrario, si dovrebbe probabilmente impostare

scrollView.autoresizingMask = UIViewAutoresizingNone; 

e impostare manualmente zoomScale e contentOffset per l'UIScrollView a rotazione. Ma dove dovrebbe essere fatto? Che dire dell'animazione di quel cambiamento?

Soluzione: Con molto modificando leggermente la risposta qui sotto ho ottenuto il comportamento sopra utilizzando il codice qui sotto:

imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | 
            UIViewAutoresizingFlexibleHeight); 

scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth 
            | UIViewAutoresizingFlexibleHeight); 

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

risposta

3

Prova questo:

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

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

io non sono sicuro se imageView verrà automaticamente ridimensionato all'interno di un UIScrollView, quindi se l'autoresizing non funziona, puoi provare ad impostare il frame da solo su ruotare per uguagliare le dimensioni della scrollview.

+1

Grazie! È stato veloce. Per ottenere il comportamento corretto ho dovuto modificare leggermente il nostro codice (vedi sopra), ma questo mi ha indirizzato. – user467225

+1

Non funziona affatto –

-1

Ho avuto una situazione simile, una scrollView molto semplice con 3 imageViews ('precedente', 'corrente' e 'successiva') per visualizzare una serie di foto.

Le foto erano tutte dimensionate per l'iPad, ma un mix di orientamento orizzontale e verticale. Volevo che si adattassero allo schermo (cioè, se necessario, in formato letterbox), mantenendo le proporzioni. Ho trovato che avevo solo bisogno di fare questo per le 3 immagini per farlo funzionare:

imageView.contentMode = UIViewContentModeScaleAspectFit;