Swift 4、将UISwipeGestureRecognizer方向传递给handler函数

Swift 4, passing UISwipeGestureRecognizer direction to the handler function

我有一个视图,它有一个滑动识别器,可以将它发送到 moveToNextItem 函数:

let swipe = UISwipeGestureRecognizer(target: self, action: #selector(moveToNextItem))     
swipe.direction = [.left, .right]
playCardView.addGestureRecognizer(swipe)

目前 moveToNextItem 函数对左右滑动的处理相同:

@objc func moveToNextItem() {
    //Moves to next item
}

将用户滑动的方向传递给该功能以便它可以向左或向右移动的正确方法是什么。我可以创建 2 个函数(一个用于左侧,一个用于右侧),但这似乎是一种糟糕的方法。我只想将方向传递给函数,让函数执行应该发生的事情。也许在某种程度上,该功能可以打开方向?像这样:

@objc func moveToNextItem() {
        switch direction{
        case .left:
             //left swipe action
        case .right:
             //right swipe action
        default: //default
        }
    }

我该怎么做?

您需要为每个滑动事件创建两个单独的手势,原因实际上是在单个事件中起作用,例如

override func viewDidLoad() {
super.viewDidLoad()

let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(moveToNextItem(_:)))
let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(moveToNextItem(_:)))

leftSwipe.direction = .left
rightSwipe.direction = .right

playCardView.addGestureRecognizer(leftSwipe)
playCardView.addGestureRecognizer(rightSwipe)
}

When a gesture is detected the moveToNextItem method is called, implement this method.

@objc func moveToNextItem(_ sender:UISwipeGestureRecognizer) {

   switch sender.direction{
    case .left:
         //left swipe action
    case .right:
         //right swipe action
    default: //default
    }

}

你可以使用方法

第一种方法

/// My Gesture For Multiple DIrection
private var mySwipeGesturec: UISwipeGestureRecognizer?

/// Directions Array
let directionsArray: [UISwipeGestureRecognizerDirection] = [.right, .left]
/// Create For Loop
for currentDirection in directionsArray {
     mySwipeGesturec = UISwipeGestureRecognizer()
     mySwipeGesturec = UISwipeGestureRecognizer(target: self, action: #selector(onScreenCodes.swipeHandler(_:)))
     mySwipeGesturec?.direction = currentDirection
     self.view.addGestureRecognizer(mySwipeGesturec!)
}

@objc func swipeHandler(_ sender: UISwipeGestureRecognizer){
        switch sender.direction {
        case .left:
            print("Left Swipe")
        case .right:
            print("Right Swipe")
        default:
            break
        }
    }

第二种方法

private var leftSwipeGesture : UISwipeGestureRecognizer?
private var rightSwipeGesture : UISwipeGestureRecognizer?


leftSwipeGesture = UISwipeGestureRecognizer()
leftSwipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(onScreenCodes.swipeHandler(_:)))
leftSwipeGesture?.direction = .left
self.view.addGestureRecognizer(leftSwipeGesture!)

rightSwipeGesture = UISwipeGestureRecognizer()
rightSwipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(onScreenCodes.swipeHandler(_:)))
rightSwipeGesture?.direction = .right
self.view.addGestureRecognizer(rightSwipeGesture!)


@objc func swipeHandler(_ sender: UISwipeGestureRecognizer){
        switch sender.direction {
        case .left:
            print("Left Swipe")
        case .right:
            print("Right Swipe")
        default:
            break
        }
    }

注意两者相同,只是取决于您的要求