388 Stimmen

UILongPressGestureRecognizer wird beim Herunterdrücken zweimal aufgerufen

Ich erkenne, ob der Benutzer 2 Sekunden lang die Taste gedrückt hat:

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

So gehe ich mit der langen Presse um:

-(void)handleLongPress:(UILongPressGestureRecognizer*)recognizer{
    NSLog(@"double oo");
}

Der Text "double oo" wird zweimal gedruckt, wenn ich die Taste länger als 2 Sekunden gedrückt halte. Woran liegt das? Wie kann ich das beheben?

731voto

joelm Punkte 8491

UILongPressGestureRecognizer ist ein kontinuierlicher Ereigniserkenner. Sie müssen den Zustand betrachten, um zu sehen, ob dies der Anfang, die Mitte oder das Ende des Ereignisses ist und entsprechend handeln. d.h. Sie können alle Ereignisse nach dem Start wegwerfen oder nur die Bewegung betrachten, die Sie benötigen. Vom Klassenreferenz :

Gesten bei langem Drücken sind kontinuierlich. Die Geste beginnt (UIGestureRecognizerStateBegan), wenn die zulässige Anzahl von Fingern (numberOfTouchesRequired) für den angegebenen Zeitraum (minimumPressDuration) gedrückt wurde und die Berührungen nicht über den zulässigen Bewegungsbereich (allowableMovement) hinausgehen. Der Gestenerkenner geht in den Zustand Change über, wenn sich ein Finger bewegt, und er endet (UIGestureRecognizerStateEnded), wenn einer der Finger angehoben wird.

So können Sie jetzt den Zustand verfolgen

-  (void)handleLongPress:(UILongPressGestureRecognizer*)sender { 
    if (sender.state == UIGestureRecognizerStateEnded) {
      NSLog(@"UIGestureRecognizerStateEnded");
    //Do Whatever You want on End of Gesture
     }
    else if (sender.state == UIGestureRecognizerStateBegan){
       NSLog(@"UIGestureRecognizerStateBegan.");
   //Do Whatever You want on Began of Gesture
     }
  }

123voto

Dan Punkte 1231

Um den Status des UILongPressGestureRecognizer zu überprüfen, fügen Sie einfach eine if-Anweisung zur Selector-Methode hinzu:

- (void)handleLongPress:(UILongPressGestureRecognizer *)sender {    
    if (sender.state == UIGestureRecognizerStateEnded) {
        NSLog(@"Long press Ended");
    } else if (sender.state == UIGestureRecognizerStateBegan) {
        NSLog(@"Long press detected.");
    }
}

87voto

Paul Solt Punkte 8017

Sie müssen den richtigen Status überprüfen, da es für jeden Status unterschiedliche Verhaltensweisen gibt. Höchstwahrscheinlich benötigen Sie die UIGestureRecognizerStateBegan Zustand mit dem UILongPressGestureRecognizer .

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
                                             initWithTarget:self 
                                             action:@selector(handleLongPress:)];
longPress.minimumPressDuration = 1.0;
[myView addGestureRecognizer:longPress];
[longPress release];

...

- (void)handleLongPress:(UILongPressGestureRecognizer *)gesture {
    if(UIGestureRecognizerStateBegan == gesture.state) {
        // Called on start of gesture, do work here
    }

    if(UIGestureRecognizerStateChanged == gesture.state) {
        // Do repeated work here (repeats continuously) while finger is down
    }

    if(UIGestureRecognizerStateEnded == gesture.state) {
        // Do end work here when finger is lifted
    }
}

20voto

Rajesh Loganathan Punkte 10855

Versuchen Sie dies einfach:

Objektiv-C

- (void)handleLongPress:(UILongPressGestureRecognizer*)sender { 
    if (sender.state == UIGestureRecognizerStateEnded) {
        NSLog(@"Long press Ended");
    } else if (sender.state == UIGestureRecognizerStateBegan) {
        NSLog(@"Long press detected.");
    }
}

Swift 2.2:

func handleLongPress(sender:UILongPressGestureRecognizer) {

        if (sender.state == UIGestureRecognizerState.Ended) {
            print("Long press Ended");
        } else if (sender.state == UIGestureRecognizerState.Began) {
            print("Long press detected.");
        }
}

19voto

fozoglu Punkte 709

Swift 3.0:

func handleLongPress(sender: UILongPressGestureRecognizer) {

    if sender.state == .ended {
        print("Long press Ended")
    } else if sender.state == .began {
        print("Long press detected")
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X