Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift: Long Press Gesture Recognizer - Detect taps and Long Press

I want to wire an action such that if the gesture is a tap, it does animates an object in a particular way but if the press duration was more than .5 secs it does something else.

Right now, I just have the animation hooked up. I don't know how I can differentiate between a long press and a tap? How do I access the press duration to achieve the above?

 @IBAction func tapOrHold(sender: AnyObject) {         UIView.animateKeyframesWithDuration(duration, delay: delay, options: options, animations: {              UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 0, animations: {                  self.polyRotate.transform = CGAffineTransformMakeRotation(1/3 * CGFloat(M_PI * 2))             })             UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 0, animations: {                 self.polyRotate.transform = CGAffineTransformMakeRotation(2/3 * CGFloat(M_PI * 2))             })             UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 0, animations: {                 self.polyRotate.transform = CGAffineTransformMakeRotation(3/3 * CGFloat(M_PI * 2))             })              }, completion: { (Bool) in                 let vc : AnyObject! = self.storyboard?.instantiateViewControllerWithIdentifier("NextView")                 self.showViewController(vc as UIViewController, sender: vc)         }) 
like image 624
blue_zinc Avatar asked Jan 21 '15 01:01

blue_zinc


1 Answers

Define two IBActions and set one Gesture Recognizer to each of them. This way you can perform two different actions for each gesture.

You can set each Gesture Recognizer to different IBActions in the interface builder.

@IBAction func tapped(sender: UITapGestureRecognizer) {     println("tapped")     //Your animation code. }  @IBAction func longPressed(sender: UILongPressGestureRecognizer) {     println("longpressed")     //Different code } 

Through code without interface builder

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: "tapped:")     self.view.addGestureRecognizer(tapGestureRecognizer)      let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: "longPressed:")     self.view.addGestureRecognizer(longPressRecognizer)  func tapped(sender: UITapGestureRecognizer) {     println("tapped") }  func longPressed(sender: UILongPressGestureRecognizer) {     println("longpressed") } 

Swift 5

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapped)) self.view.addGestureRecognizer(tapGestureRecognizer)      let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(longPressed)) self.view.addGestureRecognizer(longPressRecognizer)      @objc func tapped(sender: UITapGestureRecognizer){     print("tapped") }  @objc func longPressed(sender: UILongPressGestureRecognizer) {     print("longpressed") } 
like image 131
rakeshbs Avatar answered Sep 20 '22 18:09

rakeshbs