Die allowableMovement
Eigenschaft in meinem UILongPressGestureRecognizer
scheint ignoriert zu werden. Ich erstellte ein neues Projekt (Xcode 4.5.1, iOS 6) mit der Vorlage "Einzelansicht-Anwendung" und fügte der Ansicht einen Langdruck-Gestenerkenner hinzu. Es gibt eine Steckdose und eine Aktion. Hier ist der Code für die Aktion-Methode:allowedMovement scheint ignoriert zu werden
- (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);
}
Wenn ich lange genug drücken und loslassen bekomme ich diese im Protokoll:
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
Dies ist, was ich erwarten würde.
Aber egal was ich allowableMovement
auf (positiv, negativ, groß, klein), sobald der Zustand UIGestureRecognizerStateBegan
ist, kann ich meinen Finger über den ganzen Bildschirm ziehen. Der Status ändert sich in UIGestureRecognizerStateChanged
und es gibt häufige Updates und locationInView wird weiterhin genau verfolgt. Wenn ich loslasse, bekomme ich den UIGestureRecognizerStateRecognized
Zustand und eine endgültige Ausgabe zum Log.
Die Klassenreferenz besagt, dass der Erkenner fehlschlagen sollte, wenn die Bewegung allowableMovement
überschreitet. Warum scheint die allowableMovement
Eigenschaft ignoriert zu werden?
@ Murray Sagal: Dies löste meine Verwirrung auch. Fragen Sie sich, ob es eine Möglichkeit gibt zu erkennen, ob der Benutzer nach dem Start von LongPressGesture den Finger aus der Ansicht zieht. – Kashif
@TPos Ich denke, Sie können 'locationInView:' oder eine der Methoden wie es verwenden. Aber es klingt, als wäre es seiner eigenen Frage würdig. –