Estoy usando la clase UILongPressGestureRecognizer para manejar si se está seleccionando un elemento.UILongPressGestureReconocimiento detener el controlador sin dejar de tocar
La lógica es la siguiente: el usuario presiona durante 1 segundo un elemento (subclase UIView). Una vez que se detecta el gesto, el elemento se resalta y se puede mover.
El usuario debe mover este elemento por la pantalla sin dejar de tocarlo.
El problema al que me enfrento es el gesto reconocido sombras toques Bean/Move/Ended necesario para la clase de elemento para organizar el movimiento.
He intentado eliminar el gesto reconocido una vez que se ha detectado y el elemento seleccionado. Pero sigue enviando mensajes al control del gesto en lugar de a los métodos de toque de llamada.
¿Alguien sabe alguna forma de dejar de "escuchar" el reconocedor de gestos sin dejar el dedo de la pantalla?
Gracias.
Aquí el código:
-(void)addGestures
{
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleLongPress:)];
longPress.minimumPressDuration = iItemLongPressTime;
[self addGestureRecognizer:longPress];
[longPress release];
}
- (void)handleLongPress:(UILongPressGestureRecognizer*)sender {
if (sender.state == UIGestureRecognizerStateEnded) {
NSLog(@"Long press Ended");
}
else {
if (self.isSelected) return;
if ([delegate respondsToSelector:@selector(singleTouch:)])
[delegate singleTouch:self];
[self removeGestureRecognizer:[self.gestureRecognizers objectAtIndex:0]];
NSLog(@"Long press detected.");
}
}
Como se puede ver en la rama de lo contrario el delegado llama permite que todos los procedimientos para marcar este elemento como seleccionado, y justo después de retirar los reconocedores.
¿Qué me falta?
--EDIT--
¡Hecho! Esto funciona:
#pragma mark Gesture Functions
-(void)addGestures
{
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleLongPress:)];
longPress.minimumPressDuration = iItemLongPressTime;
[self addGestureRecognizer:longPress];
[longPress release];
}
- (void)handleLongPress:(UILongPressGestureRecognizer*)sender {
if (sender.state == UIGestureRecognizerStateEnded) {
NSLog(@"Long press Ended");
}
else {
NSLog(@"Long press detected.");
if (self.isSelected) return;
if ([delegate respondsToSelector:@selector(singleTouch:)])
[delegate singleTouch:self];
[sender removeTarget:self action:@selector(handleLongPress:)];
sender.enabled = NO;
[self removeGestureRecognizer:sender];
}
}
¡Recuerdos!
intente describir su pregunta en detalle –
He intentado enviar para eliminar el método del remitente como parámetro pero aún no funciona. – NemeSys
He editado mi respuesta ... –