Reputation: 381
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
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