Search code examples
iosswiftgestureuipangesturerecognizer

UIScreenEdgePanGestureRecognizer


I'm trying to implement screen edge pan gesture for my view controller. But the problem is, if trying to add edge pan gesture for two edges (UIRectEdge.left, UIRectEdge.right) as

let screenEdgePanGesture = UIScreenEdgePanGestureRecognizer.init(target: self, action: #selector(self.didPanningScreen))
screenEdgePanGesture.edges = [.right, .left]
screenEdgePanGesture.delegate = self
self.view.addGestureRecognizer(screenEdgePanGesture)

the selector method not calling. But the edge pan gesture is working for one edge i.e.,

let screenEdgePanGesture = UIScreenEdgePanGestureRecognizer.init(target: self, action: #selector(self.didPanningScreen))
screenEdgePanGesture.edges = .right
screenEdgePanGesture.delegate = self
self.view.addGestureRecognizer(screenEdgePanGesture)

Solution

  • Yes, you are right, UIScreenEdgePanGestureRecognizer edges is accept/working only with one value, So you need to create two different functions for left and right edge panning.

    Swift 4

    let screenEdgePanGestureRight = UIScreenEdgePanGestureRecognizer.init(target: self, action: #selector(self.didPanningScreenRight(_:)))
    screenEdgePanGestureRight.edges = .right
    screenEdgePanGestureRight.delegate = self
    self.view.addGestureRecognizer(screenEdgePanGestureRight)
    
    let screenEdgePanGestureLeft = UIScreenEdgePanGestureRecognizer.init(target: self, action: #selector(self.didPanningScreenLeft(_:)))
    screenEdgePanGestureLeft.edges = .left
    screenEdgePanGestureLeft.delegate = self
    self.view.addGestureRecognizer(screenEdgePanGestureLeft)
    
    @objc func didPanningScreenRight(_ recognizer: UIScreenEdgePanGestureRecognizer)  {
        print("Right edge penning")
    }
    
    @objc func didPanningScreenLeft(_ recognizer: UIScreenEdgePanGestureRecognizer)  {
        print("Left edge penning")
    }