Sto utilizzando la classe UILongPressGestureRecognizer per gestire se un elemento è selezionato.UILongPressGestureRecognizer arresta la maniglia senza interrompere il contatto
La logica è la seguente: L'utente preme per 1 secondo un elemento (sottoclasse UIView). Una volta rilevato il gesto, l'oggetto viene evidenziato e spostato.
L'utente deve spostare questo elemento sullo schermo senza smettere di toccarlo.
Il problema che sto affrontando è il tocco di ombre riconosciuto dal tocco. Began/Move/Ended necessario per la classe dell'oggetto per organizzare il movimento.
Ho provato a rimuovere il gesto riconosciuto una volta rilevato e l'elemento selezionato. Tuttavia, l'invio di messaggi alla maniglia del gesto invece della chiamata tocca i metodi.
Qualcuno sa come smettere di "ascoltare" il riconoscitore di gesti senza lasciare il dito sullo schermo?
Grazie.
Ecco il codice:
-(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.");
}
}
Come si può vedere nel ramo altrimenti il delegato chiama abilita tutte le procedure per contrassegnare questa voce come selezionato, e subito dopo togliere i sistemi di riconoscimento.
Cosa mi manca?
--EDIT--
Fatto! Funziona:
#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];
}
}
Saluti!
Si prega di provare a descrivere la domanda in dettaglio –
Ho provato l'invio per rimuovere il metodo il mittente come parametro, ma ancora non funziona. – NemeSys
ho modificato la mia risposta ... –