Como implementar a minha própria zoom, mas ainda tem acesso a rolagem da UIScrollView?

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

  •  20-08-2019
  •  | 
  •  

Pergunta

Eu gostaria de usar a rolagem / panning funcionalidade do UIScrollView mas eu gostaria de lidar com todo o zoom e dimensionamento mim. Meu plano atual é ter uma viewController que possui um UIView (vou chamá-lo view1) com vários UIViews e UIScrollViews como crianças.

É possível que view1 para lidar com todos os eventos multi-toque (a fim de tornar manualmente estados ampliados todos os de seus filhos) e desenhe os resultados em cada respectiva vista de rolagem para permitir que um usuário para percorrer os resultados?

(Para os curiosos, a aplicação está atraindo vários heatmaps, cada um com seu próprio conjunto de eixos. Enquanto zoom ou rolagem, os eixos precisam atualizar-se para rotular corretamente os intervalos representados na região de dados (a visão de rolagem). a razão que eu não pode usar o zoom padrão contexto-image-scaling que vem de graça com o scrollView é que qualquer coisa tirada sobre os zooms contexto (incluindo coisas como linhas de referência). a ação de zoom não é realmente fazer coisas maiores, mas para ajustar o intervalo de dados visível.)

Foi útil?

Solução 2

Obrigado por sua brad sugestão. a solução acabei usando foi estender UIScrollView e substituir o touchesMoved: withEvent: método com o seguinte:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    if ([[event touchesForView:self] count] == 1) 
         [super touchesMoved:touches withEvent:event];
    [content touchesMoved:touches withEvent:event];
}

onde "conteúdo" é um ponteiro para subexibição conteúdo do meu scrollview. Eu tinha que fazê-lo desta maneira, porque as minhas necessidades de conteúdo para zoom-a-ponto (ou seja, os pontos de dados em espaço sob os dedos do usuário não deve alterar). As informações enviadas à setTransform: só posso dizer-me o tamanho do quadro de conteúdo, mas eu também preciso o deslocamento para ele.

Outras dicas

Você pode realmente ter as principais hospedagem eventos multitouch vista interceptar e fazer escala dos UIViews subjacentes programaticamente. É o que eu faço na parte de exibição OpenGL de minha aplicação (fonte disponível aqui ). Você ainda pode passar sobre eventos de toque único à vista de rolagem subjacente para panning, etc.

No entanto, ainda pode haver uma maneira de fazer o que você descreve, sem interceptar os eventos de toque. UIScrollView faz o seu dimensionamento padrão através da aplicação de uma transformação para a sua exibição de conteúdo. Em resposta à esta questão , descrevo uma maneira de re-tornar a sua exibição de conteúdo na nova escala uma vez que o zoom pitada tenha terminado. Isso permitiria que você atualizar seu desenho com linhas de grade afiados uma vez que o zoom é feito.

Além disso, se você não está realmente raspagem e você quer mudar outra propriedade de sua visão com o zoom pitada, você pode fazer o que eu descrevo no essa pergunta e interceptar a configuração da transformação em seu contentView apenas don' t aplicar a transformação. Você pode extrair a escala que o UIScrollView quer set daquele transformar e fazer o seu próprio redesenho costume da vista em resposta.

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