Dimen
Dimen

Reputation: 381

Add swipe-up gesture recognizer to a modal view

I want to add a swipe-up recognizer to a view that has been presented modally. However, it seems like swipe-up and swipe-down gestures are reserved for view dismissal in modally presented views. When I set the recognizer to recognize left or right swipe, it works just fine but when I set it to recognize upwards swipe, it doesn't work. How can I get around with this problem?

Upvotes: 1

Views: 536

Answers (1)

RTXGamer
RTXGamer

Reputation: 3750

Add delegates and override the gesture:

class VC2: UIViewController {
    

    override func viewDidLoad() {
        super.viewDidLoad()
        let direction: UISwipeGestureRecognizer.Direction = .up
        let gesture = UISwipeGestureRecognizer(target: self, action: #selector(swipeAction(sender:)))
        gesture.direction = direction
        gesture.delegate = self
        self.view.addGestureRecognizer(gesture)
    }
    
    @objc func swipeAction(sender: UISwipeGestureRecognizer) {
       print(sender.direction)
     }
}

extension VC2: UIGestureRecognizerDelegate {
    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return false
    }

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }
}

Upvotes: 2

Related Questions