Pregunta

Tengo un UIButton que tiene una IBAction así como un UITapGestureRecognizer para detectar dobles grifos.

Por el momento parece que el IBAction está bloqueando el reconocedor. ¿Hay una manera de detener esto o UITapGestureRecognizer incluso el trabajo en los botones? Si es así, ¿no sería mejor simplemente añadir los reconocedores y eliminar los IBActions?

editar

UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget : self action : @selector (handleDoubleTap:)];
[doubleTap setNumberOfTapsRequired:2];
[A1 addGestureRecognizer:doubleTap];
[A2 addGestureRecognizer:doubleTap];
[B1 addGestureRecognizer:doubleTap];
¿Fue útil?

Solución

Parece que están tratando de unir un reconocedor gesto a varios botones. Un reconocedor gesto sólo puede estar unido a un punto de vista a la vez. Así, en su caso, el último botón va a conectar el reconocedor a (botón B1), probablemente responde a la doble toque, pero A1 y A2 no lo hacen.

Crear un reconocedor separado para cada botón.
Pero los tres reconocedores pueden llamar al mismo método de acción (handleDoubleTap:).

Sin embargo, cuando se trata de hacer un solo toque en un botón, habrá un ligero retraso, ya que espera para ver si es el comienzo de un doble toque. Hay formas de reducir el retraso, pero pueden no valer la pena si se puede vivir con el retraso y las soluciones que aparezca otras cuestiones.

Editar
En su comentario, usted dice que "quiere detectar si se pulsan al mismo tiempo". Para ello, no es necesario reconocedores gesto. Usted sólo puede usar los eventos de control estándar proporcionados.

A continuación, en IB, para cada botón , conectar el evento "Touch Down" con buttonPressed:. O, de hacerlo mediante programación:

[button1 addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];
[button2 addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];
[button3 addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];

A continuación, en IB, por cada , conectar el "Touch Up Inside" y " Retoque Fuera de los eventos" con buttonReleased:. O, de hacerlo mediante programación:

[button1 addTarget:self action:@selector(buttonReleased:) forControlEvents:UIControlEventTouchUpInside|UIControlEventTouchUpOutside];
[button2 addTarget:self action:@selector(buttonReleased:) forControlEvents:UIControlEventTouchUpInside|UIControlEventTouchUpOutside];
[button3 addTarget:self action:@selector(buttonReleased:) forControlEvents:UIControlEventTouchUpInside|UIControlEventTouchUpOutside];

A continuación, añadir Ivars hacer un seguimiento de cuántos o qué botones se presionan:

@property (nonatomic) int numberOfButtonsBeingTouched;
@property (strong, nonatomic) NSMutableSet *buttonsBeingTouched; //alloc + init in viewDidLoad or similar

Si sólo importa cuántos botones son presionados, no es necesario el NSMutableSet.

Por último, añadir los métodos y buttonPressed buttonReleased:

- (IBAction)buttonPressed:(UIButton *)button {
    self.numberOfButtonsBeingTouched++;
    [self.buttonsBeingTouched addObject:button];
    //your logic here (if (self.numberOfButtonsBeingTouched == 3) ...)
}

- (IBAction)buttonReleased:(UIButton *)button {
    self.numberOfButtonsBeingTouched--;
    [self.buttonsBeingTouched removeObject:button];
    //your logic (if any needed) here
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top