iphone - recognizer - Filtrado de grifos simples y dobles.
tap gesture recognizer swift 4 (4)
Cuando el usuario solo toca mi vista, necesito un método específico para ejecutar. Cuando el usuario toca dos veces, necesito que se realice otro método.
El problema es que la doble pulsación activa la pulsación única, e introduce errores en mi lógica. No puedo usar UIGestureRecognizer porque necesito hacer un seguimiento de los puntos.
Intento unos booleanos, pero no hay oportunidad. También probé la técnica cancel / perfomSelector-delay, pero no funciona (es extraño porque otras personas en otros foros dijeron que funciona, ¿tal vez la detección táctil del simulador sea diferente?)
Estoy intentando que el usuario establezca la posición (arrastrar, rotar) de una pieza de la placa, pero debo tener en cuenta las intersecciones de las piezas, el clip en el área de la placa, etc., por eso un simple booleano no solucionará el problema.
¡Gracias por adelantado!
Comprueba this , parece justo lo que buscas:
Debajo del código para usar UITapGestureRecognizer para manejar un solo toque y doble toque. El código está diseñado para que no se active el evento de un solo toque si obtuvimos el evento de doble toque. El truco es utilizar requireGestureRecognizerToFail para solicitar el gesto de un solo toque, la espera para el evento de doble toque falló antes de dispararse. Entonces, cuando el usuario toca la pantalla, el reconocedor de gestos de un solo toque no activará el evento hasta que el reconocedor de gestos de doble toque. Si el reconocedor de gestos de doble toque reconoce el evento, disparará un evento de doble pestaña y omitirá el evento de un solo toque, de lo contrario disparará un evento de un solo toque.
UITapGestureRecognizer *doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(handleDoubleTap:)];
doubleTapGestureRecognizer.numberOfTapsRequired = 2;
//tapGestureRecognizer.delegate = self;
[self addGestureRecognizer:doubleTapGestureRecognizer];
//
UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
singleTapGestureRecognizer.numberOfTapsRequired = 1;
[singleTapGestureRecognizer requireGestureRecognizerToFail: doubleTapGestureRecognizer];
//tapGestureRecognizer.delegate = self;
[self addGestureRecognizer:singleTapGestureRecognizer];
Posiblemente no entiendo exactamente lo que quieres decir con "necesito hacer un seguimiento de los puntos", pero no veo ningún problema al hacer esto con un reconocedor de gestos.
Simplemente implemente los métodos del delegado UIGestureRecognizer configurando el delegado correctamente.
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
return YES;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
También agrega esta línea de código
[singleTap requireGestureRecognizerToFail:doubleTap];
Solución rápida:
doubleTapSmall1.numberOfTapsRequired = 2
doubleTapSmall1.addTarget(self, action: "doubleTapPic1")
smallProfilePic1.addGestureRecognizer(doubleTapSmall1)
singleTapSmall1.numberOfTapsRequired = 1
singleTapSmall1.addTarget(self, action: "singleTapPic1")
singleTapSmall1.requireGestureRecognizerToFail(doubleTapSmall1)
smallProfilePic1.addGestureRecognizer(singleTapSmall1)
Solución Swift 3:
doubleTap = UITapGestureRecognizer(target: self, action:#selector(self.doubleTapAction(_:)))
doubleTap.numberOfTapsRequired = 2
singleTap = UITapGestureRecognizer(target: self, action:#selector(self.singleTapAction(_:)))
singleTap.numberOfTapsRequired = 1
singleTap.require(toFail: doubleTap)
self.view.addGestureRecognizer(doubletap)
self.view.addGestureRecognizer(singleTap)
En la línea de código singleTap.require (toFail: doubleTap) estamos forzando el toque único para esperar y asegurarnos de que incluso el toque no sea doble. Lo que significa que estamos solicitando que el evento de doble toque haya fallado, por lo que se concluye como un solo toque.