快速,滑动手势识别器方向无效,似乎无法获得方向

时间:2019-01-01 16:19:04

标签: ios swift uigesturerecognizer

编辑:现在,滑动手势一次只能沿一个方向移动。如果有人知道同时处理多个方向的另一种方法,我仍然会很感激!

Eidt:在此[answer](https://stackoverflow.com/a/46104997/9645644)中,我找到了一种简洁地处理多个方向的方法,它使用带有forEach循环的数组文字。这比情节提要中单独添加手势和拖动动作要方便得多。

我正在尝试使用快速滑动手势来工作,在我尝试检测滑动方向之前,一切都很好。下面是我的代码。我不明白为什么这行不通,请多多关照!

在视图控制器的viewDidLoad中,我设置并添加了方向为[.left,.right]的滑动手势识别器。之后,我实现了需要检测滑动方向的处理程序方法。该视图控制器中没有其他内容。 在无法正常工作(滑动时无响应)之后,我添加了一些打印件,并将输出显示在标题中。

override func viewDidLoad() {
    super.viewDidLoad()
    let swipeGestureRecognizer = UISwipeGestureRecognizer(target:self, action:#selector(swipeHandler(recognizer: )))
    swipeGestureRecognizer.direction = [.left, .right]
    view.addGestureRecognizer(swipeGestureRecognizer)
}

@objc func swipeHandler (recognizer: UISwipeGestureRecognizer){
    switch recognizer.state{
    case .ended:
        let direction = recognizer.direction
        print(direction)
        if direction == .left {print(”left”)}
        else if direction == .right {print(“right”)}
        else {print(print(“none”)}
    defaul: break
}

无论我向左或向右滑动,它总是打印“无”。并且方向打印始终给出“ UISwipeGestureRecognizerDirection(rawValue:3)”

2 个答案:

答案 0 :(得分:0)

direction属性告诉手势何时触发。例如,如果direction == .right,则滑动只会在向右滑动时触发。 (它不会告诉您检测到的方向)

答案 1 :(得分:0)

您需要一次检测一个方向。我还建议添加一种方法来控制每个滑动方向。例如。

func setUpGestures() {
    // Gesture that define a left swipe.
    let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(Scene.swipeLeft))
    swipeLeft.direction = .left
    view?.addGestureRecognizer(swipeLeft)
    // Do the same for the rest of the directions.
}

@objc func swipeLeft() {
    // Do something when the user swipe left.
}

希望有帮助!