Search code examples
swiftsegueuigesturerecognizer

UISwipeGestureRecognizer.Direction.down


I've set a GestureRecognizer for left/right but i'd also like to add a GestureRecognizer for down (but not up). When I apply the following, the swipe up works as expected on the device screen; however, UISwipeGestureRecognizer.Direction.down does nothing.

func addGesture() {
    // Gesture recognizers
    let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeAction(swipe:)))
    leftSwipe.direction = UISwipeGestureRecognizer.Direction.left
    self.view.addGestureRecognizer(leftSwipe)

    let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeAction(swipe:)))
    rightSwipe.direction = UISwipeGestureRecognizer.Direction.right
    self.view.addGestureRecognizer(rightSwipe)

    let downSwipe = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeAction(swipe:)))
    downSwipe.direction = UISwipeGestureRecognizer.Direction.down
    self.view.addGestureRecognizer(downSwipe)
}

Am I missing an identifier in the storyboard segue or is there something else I need to do for the device to recognize a down swipe?


Solution

  • func addGesture() {
        // Gesture recognizers
    
        let directions: [UISwipeGestureRecognizer.Direction] = [.left, .right, .down]
        for direction in directions {
            let gesture = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeAction(swipe:)))
            gesture.direction = direction
            self.view.addGestureRecognizer(gesture)
        }
    
    }
    
    @objc func swipeAction(swipe:UISwipeGestureRecognizer) {
        if let swipeGesture = swipe as? UISwipeGestureRecognizer {
            switch swipeGesture.direction {
    
    
            case UISwipeGestureRecognizer.Direction.left:
                print("Swiped left")    
                let vc = self.storyboard!.instantiateViewController(withIdentifier: "ViewController5") as! ViewController5
                vc.hero.modalAnimationType = .fade
                hero.replaceViewController(with: vc)
    
            case UISwipeGestureRecognizer.Direction.right:
                print("Swiped right")
                let vc = self.storyboard!.instantiateViewController(withIdentifier: "ViewController") as! ViewController
                vc.hero.modalAnimationType = .fade
                hero.replaceViewController(with: vc)
    
            case UISwipeGestureRecognizer.Direction.down:
                print("Swiped down")
                let vc = self.storyboard!.instantiateViewController(withIdentifier: "ViewController3") as! ViewController3
                vc.hero.modalAnimationType = .pull(direction: .down)
                hero.replaceViewController(with: vc)
    
            default:
                break
            }
        }
    }