Como restaurar dinamicamente nível de zoom do UIScrollView e posição quando meus relançamentos de aplicativos?

StackOverflow https://stackoverflow.com/questions/654845

Pergunta

Meu aplicativo consiste em um UIImageView dentro de um UIScrollView, e eu exibir um grande dentro imagem dele. O ponto de vista de rolagem permite que o usuário apertar para zoom in / out na imagem, e que tudo parece funcionar muito bem.

No entanto, quando o aplicativo é encerrado e, em seguida, re-lançado, os UIScrollView exibe novamente a imagem no nível de zoom original (que está definido para exibir a imagem inteira, por dimensioná-lo em um modo de "aspecto fit").

Eu realmente gostaria de ser capaz de re-lançar meu aplicativo e ter a UIScrollView reabrir com os mesmos parâmetros como foi definido quando o aplicativo encerrado. Então, se minha imagem está ampliada ao máximo, e rolado todo o caminho até o canto inferior esquerdo do mesmo, que deve ser a visão quando eu abrir o aplicativo novamente.

Como posso fazer isso?

Foi útil?

Solução

Eu encontrei uma maneira de ampliar programaticamente UIScrollView. Isso pode ajudá-lo a definir o nível de zoom desejado na inicialização.

O código de exemplo, juntamente com a classe ZoomScrollView que encapsula a magia zoom necessário e uma discussão detalhada de como (e por que) UIScrollView zoom obras está disponível em github.com/andreyvit/ScrollingMadness/ .

Outras dicas

Verifique a propriedade .transform da vista. Se você estiver ampliada, este deve ser modificado. Salvar e restaurá-lo no próximo lançamento.

Alguém perguntou isso um tempo atrás, mas eu não acho que você vai gostar a resposta . Esperamos que você vai obter um melhor.

Eu faço isso como este: Quando você parar de salvar o zoomLevel (myScrollview.zoomScale) ea origem quadro contentView.

Quando você reabrir você pode definir o zoomscale. Você também tem que definir o tamanho do conteúdo para o novo zoomLevel, porque senão as fronteiras não estão corretas.

    [myScrollview setZoomScale:savedZoomScale];
    CGSize newsize = CGSizeMake(origsize.width * savedZoomScale, 
                                 origsize.height * savedZoomScale);
    myScrollview.contentSize = newsize;

Para definir o offset:

[myScrollView setContentOffset:savedFrameOrigin animated:YES];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top