Mudar gestão UITouch de touchesBegan para UIScrollViewDelegate

votos
0

Estou desenvolvendo um aplicativo de desenho iOS onde a principal característica é que um usuário pode carregar uma imagem como plano de fundo e, em seguida, ele pode começar dedo desenho em cima dela, zoom e visão panorâmica da imagem com o desenha na parte superior da própria imagem.

O esquema da aplicação é o seguinte.

MainUiView-> UIScrollView-> UIImageView

Dedos desenho e rastreamento é gerido no touchesBegan, touchesMoved, touchesEndedsubstituição da UIResponder.

O Zoom e visão panorâmica do UIImageViewé gerido pela UIScrollViewDelegateimplementação.

Eu tenho um botão que muda o modo de aplicativo de desenho para zoom e o modo panorâmico da seguinte forma:

se você quiser desenhar:

    [scrollView setUserInteractionEnabled:NO];
    [imageView setUserInteractionEnabled:YES];

de modo que os toques são geridos nos touchesBegan, touchesMoved, touchesEndedmétodos.

se você quiser panorâmica e zoom com dois dedos usando a pitada de zoom gesto

[scrollView setUserInteractionEnabled:YES]; 
[imageView setUserInteractionEnabled:NO];

de modo que o gesto de dois dedos é gerido pela UIScrollViewDelegate

Agora eu estou tentando evoluir o aplicativo removendo o botão para alternar do sorteio para fazer zoom e modo panorâmico.

Minha idéia era controlar a presença de dois dedos no touchesBegane, em seguida, para desativar a interação do usuário no UIImageViewpara permitir a interação do usuário no scrollview, mas o problema é que depois de fazer isso os toques ainda são gerenciados no touchesMovedmétodo, nada vem à scrollViewDelegateaté eu levantar meus dedos a partir da tela, depois disso, se eu punt dedos novamente na tela tudo é gerido pelo scrollViewDelegate.

Assim, para resumir: é possível interromper o ciclo de toques depois touchesBegane propagar-lo para o ScrollViewDelegate?

Se isso não for possível, como eu posso conseguir o zoom, pan e recurso de desenho em um UImageView? Devo remover o scrollview e tentar ampliar e deslocar a UImageViewatravés dos UIRespondermétodos?

Obrigado pela ajuda

Publicado 19/09/2018 em 13:34
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Tente alterar sua implementação usar reconhecedores gesto em vez de manipulação de toque usando os métodos UIResponder. Principais benefícios desta abordagem são:

  • Você pode usar UIPanGestureRecognizer para o desenho , ou até mesmo criar um reconhecedor personalizado
  • Você pode ter relações de dependência entre reconhecedores, usando requireGestureRecognizerToFail , mesmo através de pontos de vista
  • Você pode percorrer todos os reconhecedores de uma vista e desativar o aparelho só específico de gestos sem desactivar toques em toda a visão
  • reconhecedores gesto tem os métodos mesmo toque relacionados, que você pode usar para mover o código de manipulação de toque de implementação atual até os gestos

Assim, a sua visão de imagem terá qualquer panela ou o seu costume gesto reconhecedor, com um único toque, para o desenho, e você pode percorrer reconhecedores de ScrollView, e marcá-los não acionar se gesto 'desenhar' é acionado, utilizando requireGestureRecognizerToFail.

Com isso, você não precisa para permitir interação com o usuário desativar / em qualquer um dos pontos de vista, embora você terá que fazer uma lo de tentativa e erro para obter todos os gestos para trabalhar uns com os outros corretamente.

Feliz codificação :)

Respondeu 19/09/2018 em 14:05
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more