Como restaurar dinamicamente nível de zoom do UIScrollView e posição quando meus relançamentos de aplicativos?
-
19-08-2019 - |
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?
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];