iPhone: GestureRecognizer a veces no dispara?

Estoy intentando get una tecla larga presionando un button que funciona con el objective c para iPhone.

Aquí está el código que he juntado para GestureRecognizer:

UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)]; longPressGesture.minimumPressDuration = 1.0; //1 second longPressGesture.delegate = self; [deleteButton addGestureRecognizer:longPressGesture]; [longPressGesture release]; 

Y aquí está la function que uso en el selector para llamar cuando se detecta una pulsación larga.

 -(void)handleLongPress:(UILongPressGestureRecognizer *) gestureRecognizer { if (gestureRecognizer.state == UIGestureRecognizerStateBegan) { NSLog(@"Got handle long key press"); NumLabel.text = @""; } } 

También agregué las siguientes funciones como parte de mi class de delegado, pero no parecen haber tenido ningún impacto:

 -(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ return YES; } -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ return NO; } -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ return YES; } 

Mi problema es que esto a veces funciona, pero a veces no funciona, la mayoría de las veces recibo la llamada para manejar LongPress y funciona bien, pero de vez en cuando cuando presiono y presiona el button no recibo nada hasta que levanto el dedo Desactive el button en qué etapa se ejecuta mi código normal para el button.

¿He omitido algo en los tutoriales o puede alguien ver por qué funcionaría a veces pero no recibo nada en otras ocasiones?

EDITAR

De hecho, creo que el problema está en la forma en que se presiona el button, si presiono el button directamente y lo sostengo, funciona bien, sin embargo, si mi dedo se desliza sobre el button, incluso un poco, no se llama a la function handleLongPress.

¿Estoy asumiendo que esto es porque lo reconoce como un gesto separado? ¿Hay alguna forma de asegurarse de que se llame a handleLongPress siempre que se mantenga presionado el button, incluso si el dedo se mueve a través del button?

Los reconocedores de gestos son solo para TOUCHES, no para los estados de los botones. Una pulsación larga es realmente simplemente presionando y soltando. ¡Cuando se mueve el tacto, el gesto será cancelado!
Si solo desea saber si su button se presiona más de una hora específica, puede manejar los events TouchDown / TouchCancel de su button y agregar un poco de time.

Sí, podemos implementar el reconocimiento de gestos junto con los botones. aquí va:

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressButton:)]; [someButtonName addGestureRecognizer:longPress]; longPress.minimumPressDuration = 2.0; //longPress.delegate = self; [longPress release];

utilícelo donde está creando su button aur en el método en el que desea implementarlo.y luego

- (void)longPressButton:(UILongPressGestureRecognizer*)gesture { if ( gesture.state == UIGestureRecognizerStateEnded) { NSLog(@"Long Pressed"); //your stuff here when detected long hold } }