Estou tentando adicionar 2 UITapGestureRecognizers
a uma exibição, uma para toque único e outra para eventos de toque duplo. O reconhecedor de toque único está funcionando conforme o esperado (por conta própria). Mas parece que não consigo fazer o reconhecedor de toque duplo funcionar.
Tentaram experimentar com imóveis como: cancelsTouchesInView
, delaysTouchesBegan
e delaysTouchesEnded
, mas ainda não funciona.
Ao tocar duas vezes, o reconhecedor de toque único sempre será ativado e o evento de toque duplo também será enviado para a super visão. Mas o reconhecedor de toque duplo personalizado não parece ser notificado.
As documentações parecem sugerir que as três propriedades mencionadas acima podem ser usadas para esse fim. Mas não tenho certeza de quais valores devem ser definidos e em quais reconhecedores (únicos, duplos ou ambos). Espero que alguém familiarizado com isso possa ajudar.
A seguir, é apresentado o bloco de código atualizado mais recente.
// ****** gesture recognizers ******
- (void)addSingleAndDoubleTapGestureRecognizersToView:(UIView *)view
{
// single tap
UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: tableViewController action: @selector(handleSingleTapOnView:)];
[singleTapRecognizer setNumberOfTouchesRequired:1];
[view addGestureRecognizer: singleTapRecognizer];
// double tap
UITapGestureRecognizer *doubleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: tableViewController action: @selector (handleDoubleTapOnView:)];
[doubleTapRecognizer setNumberOfTouchesRequired:2];
[singleTapRecognizer requireGestureRecognizerToFail: doubleTapRecognizer];
[view addGestureRecognizer: doubleTapRecognizer];
}
- (void)handleSingleTapOnView:(id)sender
{
}
- (void)handleDoubleTapOnView:(id)sender
{
}
Respostas:
Nota: Se você estiver usando,
numberOfTouchesRequired
ele deve ser.numberOfTouchesRequired = 1;
Para Swift
fonte
Solução Swift 3:
Na linha de código singleTap.require (toFail: doubleTap) , estamos forçando o toque único a aguardar e garantir que o evento tap não seja um toque duplo.
fonte
Você precisa usar o método requireGestureRecognizerToFail:. Algo assim:
[singleTapRecognizer requireGestureRecognizerToFail:doubleTapRecognizer];
fonte
// ---- primeiro, você precisa alocar o gesto de toque duplo e único ------- //
// ----------------------- número de torneira ---------------- //
// ------- adicione toque duplo e gesto de toque único na visualização ou botão -------- //
fonte
Não tenho certeza se é exatamente isso que você está procurando, mas eu toquei duas vezes sem reconhecer os gestos. Estou usando-o em um UITableView, então usei esse código no método didSelectRowAtIndexPath
Os métodos singleTap e doubleTap são anulados com NSIndexPath como parâmetro:
Espero que ajude
fonte
Solução para Swift 2:
fonte
Eu implementei os métodos UIGestureRecognizerDelegate para detectar singleTap e doubleTap.
Apenas faça isso.
Em seguida, implemente esses métodos de delegação.
fonte
Algumas visualizações têm seus próprios reconhecedores de toque duplo embutidos (
MKMapView
sendo um exemplo). Para contornar isso, você precisará implementar oUIGestureRecognizerDelegate
métodoshouldRecognizeSimultaneouslyWithGestureRecognizer
e retornarYES
:Primeiro implemente seus reconhecedores duplos e únicos:
E, em seguida, implemente:
fonte
Em referência ao comentário de @ stanley -
Não tente usar gestos de toque para alinhar as seleções para trabalhar,
UITableView
pois ele já possui tratamento de toque completo ....Mas você deve definir 'Cancela toques na exibição' como 'NÃO' em seus reconhecedores de gestos de toque único ou ele nunca receberá os eventos de toque.
fonte