La proprietà allowableMovement
nel mio UILongPressGestureRecognizer
sembra essere ignorata. Ho creato un nuovo progetto (Xcode 4.5.1, iOS 6) utilizzando il modello Applicazione vista singola e aggiunto un Riconoscitore di gesti a pressione lunga alla vista. C'è una presa cablata e un'azione. Ecco il codice per il metodo di azione:consentito Il movimento sembra essere ignorato
- (IBAction)longPress:(UILongPressGestureRecognizer *)sender
{
if (sender.state == UIGestureRecognizerStatePossible) NSLog(@"possible");
if (sender.state == UIGestureRecognizerStateBegan) NSLog(@"began");
if (sender.state == UIGestureRecognizerStateChanged) NSLog(@"changed");
if (sender.state == UIGestureRecognizerStateRecognized) NSLog(@"recognized");
if (sender.state == UIGestureRecognizerStateCancelled) NSLog(@"cancelled");
if (sender.state == UIGestureRecognizerStateFailed) NSLog(@"failed");
CGPoint locationInView = [sender locationInView:self.view];
NSLog(@"long press: allowableMovement= %f, x= %f, y= %f", sender.allowableMovement, locationInView.x, locationInView.y);
}
Se premo abbastanza a lungo e lasciare andare ottengo questo nel registro:
2012-10-30 20:24:41.449 Long Press[1078:907] began
2012-10-30 20:24:41.455 Long Press[1078:907] long press: allowableMovement= 10.000000, x= 210.500000, y= 99.500000
2012-10-30 20:24:42.880 Long Press[1078:907] recognized
2012-10-30 20:24:42.882 Long Press[1078:907] long press: allowableMovement= 10.000000, x= 208.500000, y= 96.000000
Questo è quello che mi aspetterei.
Ma non importa quello che ho impostato allowableMovement
su (positivo, negativo, grande, piccolo), una volta che lo stato è UIGestureRecognizerStateBegan
, posso trascinare il dito su tutto lo schermo. Lo stato cambia in UIGestureRecognizerStateChanged
e ci sono aggiornamenti frequenti e locationInView continua a tracciare con precisione. Quando lascio andare, ottengo lo stato UIGestureRecognizerStateRecognized
e un output finale nel log.
Il riferimento di classe indica che il riconoscimento deve fallire se il movimento supera allowableMovement
. Perché la proprietà allowableMovement
sembra essere ignorata?
@ Murray Sagal: questo ha risolto anche la mia confusione. Chiedendosi, se c'è un modo per rilevare se l'utente trascina il dito fuori dalla vista dopo l'avvio di LongPressGesture. – Kashif
@TPos Penso che tu possa usare 'locationInView:' o uno dei metodi come questo. Ma sembra che sarebbe degno della sua stessa domanda. –