Imagem em escala para ajustar a tela na rotação do iPhone
-
26-09-2019 - |
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;
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;