Pergunta

Eu tenho um UIScrollView contendo um UIImageView e tenho alguns problemas para obter o comportamento correto quando o iPhone girar.

Meta: Estou tentando obter o seguinte ao passar de retrato para paisagem:

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

Aqui, a imagem inteira na visão de retrato é escalada para caber na vista da paisagem quando o iPhone gira. Também está centrado. Também estou tentando preservar a proporção. A interação do usuário também está ligada e o usuário deve poder usar a tela inteira para panorar/zoom a imagem.

Atualmente eu tenho o seguinte autoresizingMask no scrollView:

 scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth |
                               UIViewAutoresizingFlexibleHeight);       

Mas isso dá o seguinte

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

Essa configuração preserva a escala e compensa do canto superior esquerdo.

Pergunta:É possível obter esse comportamento usando adequado autoresizingMask? Caso contrário, provavelmente deve ser definido

 scrollView.autoresizingMask = UIViewAutoresizingNone;

e definido manualmente zoomScale e contentOffset Para o UIScrollView na rotação. Mas, onde isso deve ser feito? Que tal animar essa mudança?

Solução:Ao modificar um pouco a resposta abaixo, obtive o comportamento acima usando o código abaixo:

imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
                                     UIViewAutoresizingFlexibleHeight);

scrollView.autoresizingMask =(UIViewAutoresizingFlexibleWidth 
                                     | UIViewAutoresizingFlexibleHeight);

imageView.contentMode = UIViewContentModeScaleAspectFit;
scrollView.contentMode = UIViewContentModeCenter;
Foi útil?

Solução

Experimente isso:

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

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

Não tenho certeza se o ImageView será redimensionado automaticamente dentro de um UIScrollView; portanto, se a automobilização não funcionar, você pode tentar definir o quadro em girar para igual ao tamanho do scrollView.

Outras dicas

Eu tive uma situação semelhante, um ScrollView muito simples com 3 ImageViews ('anterior', 'Current' e 'Next') para exibir uma série de fotos.

As fotos eram todas dimensionadas para o iPad, mas uma mistura de orientações paisagísticas e retratos. Eu queria que eles se encaixassem na tela (ou seja, a caixa de correio, se necessário), com a proporção retida. Eu achei que só precisava fazer isso com as três Imagens para funcionar:

imageView.contentMode = UIViewContentModeScaleAspectFit;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top