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

前端 未结 3 1272
情话喂你
情话喂你 2020-12-05 00:11

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

相关标签:
3条回答
  • 2020-12-05 00:45

    For swift2

    let lpgr = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress))
    lpgr.minimumPressDuration = 0.5
    lpgr.delaysTouchesBegan = true
    lpgr.delegate = self
    self.featuredCouponColView.addGestureRecognizer(lpgr)
    

    Action

    //MARK: - UILongPressGestureRecognizer Action -
        func handleLongPress(gestureReconizer: UILongPressGestureRecognizer) {
            if gestureReconizer.state != UIGestureRecognizerState.Ended {
                //When lognpress is start or running
            }
            else {
                //When lognpress is finish
            }
        }
    

    For Swift 4.2/ Swift 5

    let lpgr = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress))
    lpgr.minimumPressDuration = 0.5
    lpgr.delaysTouchesBegan = true
    lpgr.delegate = self
    self.colVw.addGestureRecognizer(lpgr)
    
    //MARK: - UILongPressGestureRecognizer Action -
        @objc func handleLongPress(gestureReconizer: UILongPressGestureRecognizer) {
            if gestureReconizer.state != UIGestureRecognizer.State.ended {
                //When lognpress is start or running
            }
            else {
                //When lognpress is finish
            }
        }
    
    0 讨论(0)
  • 2020-12-05 00:57

    Through code without interface builder

    // Global variables declaration
    var longPressed = false
    var selectedRow = 0
    
    
    
    override func viewDidLoad() {
            super.viewDidLoad()  
            let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(ContactListTableViewController.handleLongPress(_:)))
            longPressGesture.minimumPressDuration = 1.0 // 1 second press
            longPressGesture.allowableMovement = 15 // 15 points
            longPressGesture.delegate = self
            self.tableView.addGestureRecognizer(longPressGesture)
        }
    
    // Long tap work goes here !!
    if (longPressed == true) {
    
           if(tableView.cellForRowAtIndexPath(indexPath)?.accessoryType == .Checkmark){
                    tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = .None
                    self.selectedRow -= 1
    
                    if(self.selectedRow == 0){
                        self.longPressed = false
                    }
    
                } else {
                    self.selectedRow += 1
                    tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = .Checkmark
                }
    
            } else if(self.selectedRow == 0) {
              // Single tape work goes here !!
            }
    

    But the only problem is the long press gesture runs two times. If you have found any solution do comment below !

    0 讨论(0)
  • 2020-12-05 00:58

    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")
    }
    
    0 讨论(0)
提交回复
热议问题