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?

14voto

Raj Punkte 3585

Hier ist, wie man es in Swift handhabt:

func longPress(sender:UILongPressGestureRecognizer!) {

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

7voto

Pankaj Wadhwa Punkte 3023

Ihre Geste Handler empfängt Aufruf für jeden Zustand der Geste. so müssen Sie eine Prüfung für jeden Zustand und setzen Sie Ihren Code in erforderlichen Zustand.

Man muss die Verwendung von switch-case gegenüber if-else vorziehen:

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

-(void)handleLongPress:(UILongPressGestureRecognizer *)gesture {
        switch(gesture.state){
          case UIGestureRecognizerStateBegan:
               NSLog(@"State Began");
               break;
          case UIGestureRecognizerStateChanged:
               NSLog(@"State changed");
               break;
          case UIGestureRecognizerStateEnded:
               NSLog(@"State End");
               break;
          default:
               break;
         }
}

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