Pergunta

Eu tenho uma UIScrollView que contém uma imagem e um controle segmentado que permite ao usuário alternar o interior imagem do ScrollView. Se eu apenas trocar a imagem para fora dentro do UIImageView, ele irá mostrar a nova imagem no estado ampliada. Como faço para redefinir a volta UIScrollView à sua un-zoom-in estado?

Foi útil?

Solução

Eu tenho uma discussão detalhada de como (e por que) UIScrollView zoom obras em github.com/andreyvit/ScrollingMadness / .

(O link contém também uma descrição de como ampliar programaticamente UIScrollView, como emular Photo Library estilo paginação + zoom + rolagem, um projeto de exemplo e classe ZoomScrollView que encapsula um pouco da magia de zoom.)

Citação:

UIScrollView não tem uma noção de um “nível de zoom atual”, porque cada subexibição ele contém pode ter o seu próprio nível de zoom atual. Note-se que não há nenhum campo em UIScrollView para manter o nível de zoom atual. No entanto, saber que alguém lojas que nível de zoom, porque se você beliscar-zoom em uma subexibição, em seguida, redefinir a sua transformação para CGAffineTransformIdentity, e, em seguida, apertar novamente, você vai notar que o nível de zoom anterior do subexibição foi restaurada.

Na verdade, se você olhar para a desmontagem, é UIView que armazena o seu próprio nível de zoom (dentro UIGestureInfo objeto apontado pelo campo _gestureInfo). Ele também tem um conjunto de métodos ilegais agradáveis ??como zoomScale e setZoomScale:animated:. (Lembre-se, ele também tem um monte de métodos de rotação-relacionados, talvez nós estamos recebendo apoio gesto de rotação algum dia em breve.)

No entanto, se criar uma nova UIView apenas para zoom e adicionar nosso ponto de vista com zoom real como seu filho, vamos começar sempre com o nível de zoom 1.0. Minha implementação de zoom programático baseia-se este truque.

Outras dicas

Se você não está redesenhando sua opinião sobre a conclusão da pitada zoom evento, então o fator de zoom está sendo definido pela propriedade transformar a vista você voltar da viewForZoomingInScrollView: método delegado. Para repor esta zoom, defina o valor da visão de transformar a propriedade para CGAffineTransformIdentity.

Cuidado, porém, que a sua próxima operação de zoom pitada começará onde o pinch-zoom anterior parou (isto é, a sua nova escala será ignorado). Para contornar isso, você pode precisar implementar algumas das coisas que eu descrevo aqui .

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