Pergunta

Estou desenvolvendo um visualizador de imagem, assim como o aplicativo de fotos.

É um UISCROLLVIEW com paginação ativada com imagens carregadas da Internet, então eu adaptei partes do Amostra do LazyTableImages. A visualização de rolagem e cada visualização de imagem dentro dela têm todos os seus sinalizadores de máscara automáticos.

Quando observei como os redes estavam acontecendo durante a rotação, parecia bom, mas uma vez que comecei a tentar interagir com a visualização de rolagem, percebi que também precisava alterar programaticamente o tamanho do contentView. Fiz isso implementando o DIDROTATEFROMINTERFACIDADE: no meu controlador de exibição.

[self.scrollView setContentSize:CGSizeMake(numberOfImages * portraitWidth, [scrollView bounds].size.height)];

Com a interação se comportando corretamente, descobri que, se estivesse visualizando a segunda foto e gire, partes das fotos 1º e 2º seriam mostradas na tela. Eu também precisava alterar o conteúdo do ContentOffset.

Eu tentei corrigir essas duas maneiras - ambos usando o scrollrectTovisible: Animated: Method of UIScrollView, além de tentar definir a propriedade ContentOffset diretamente. E eu experimentei colocando esse código nas implementações das respostas "uma etapa" e "em duas etapas" às mudanças na orientação. Por exemplo:

-(void)didAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
[self.scrollView setContentOffset:CGPointMake(currentlyViewedPhotoIndex * largeImageHeight,0) animated:YES];

Em todos os casos, porém, parece muito mal -humorado. Ou eu vejo claramente o pergaminho acontecer, ou apenas pula. Uuuuuuuuuuuugly! Existe uma maneira de fazer isso para se comportar exatamente como o aplicativo de fotos?

Foi útil?

Solução

O que acabei fazendo - pouco antes do início da rotação, oculte o UIScrollView e crie um UIImageView que contém a imagem atualmente vista. Gire, essa imagem girará tudo de bom e bonito e, quando a rotação for concluída, remova o ImageView e unhe a exibição de rolagem.

ATUALIZAÇÃO - Se você está lendo isso hoje (a qualquer momento após o iOS 6), use um uiPageViewController e defina transição para o uiPageViewControllerTransitionStylesCroll, para crissakes.

Outras dicas

Fiz algo um pouco diferente quando se depara com o mesmo problema. Dentro willRotateToInterfaceOrientation:duration:, Eu escondo todas as subvisões do UISCROLLVIEW, exceto para a subview atualmente exibida e em didRotateFromInterfaceOrientation: Eu uio as subviews.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top