2016-06-14 25 views
3

Ich möchte eine Geste hinzufügen, die nur ausgelöst wird, wenn eine Person für eine Sekunde oder so gedrückt wurde. Kein Tippen, sondern langes Drücken. Wenn ich uilongpressgesture- recognizer verwende, feuert es weiter, bis ich meinen Finger loslasse. Wie kann ich das umgehen?uilongpressgesture_recognizer Feuer nur einmal

+1

Welchen Status der Geste verwenden Sie, um dies zu sehen? Wenn Sie 'GestenRecognizer.State' einschalten und nur nach dem Zustand' .Ended' suchen, wird es nur einmal pro langer Betätigung (am Ende der langen Betätigung) erscheinen. – keithbhunter

Antwort

5

Set minimumPressDuration beim Erstellen und fügen Sie Geste als unten:

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

Schreiben Sie Ihren Code in UIGestureRecognizerStateEnded Zustand wie folgt:

-(void)handleLongPress:(UILongPressGestureRecognizer *)Gesture{ 
    if (Gesture.state == UIGestureRecognizerStateEnded) { 


     //Do any thing after long press ended,which will be 1.0 second as set above 


    } 
    else if (Gesture.state == UIGestureRecognizerStateBegan){ 



    } 
} 
+0

Danke funktioniert wie ein Zauber. – TheHellOTrofasdasd

0

Eingestellter Wert von minimumPressDuration Eigenschaft von UILongPressGestureRecognizer.

0

Lange Pressverfahren wird einmal aufgerufen, wenn die Schaltfläche Zustandsänderung (Begann, Ende) Wenn Sie etwas erreichen wollen, dann tun Sie wie folgt.

//MARK:Button tap events 
- (void)btnLongPress:(UILongPressGestureRecognizer*)gesture{ 
    switch (gesture.state) { 
     case UIGestureRecognizerStateBegan: 
     { 
      //tmrForPoint is timer 
      tmrForPoint = [NSTimer timerWithTimeInterval:0.5 target:self selector:@selector(btnAddTap) userInfo:nil repeats:YES]; 

      NSRunLoop * theRunLoop = [NSRunLoop mainRunLoop]; 
      [theRunLoop addTimer:tmrForPoint forMode:NSDefaultRunLoopMode]; 
     } 
      break; 
     case UIGestureRecognizerStateEnded: 
     { 
      [tmrForPoint invalidate]; 
      tmrForPoint = nil; 
     } 
      break; 
     default: 
      break; 
    } 
} 

//Call this method every 0.5 Second 
-(void)btnAddTap{ 
    NSLog("Method called") 
}