繁体   English   中英

如何在同一视图上交替使用平移手势和滑动手势?

[英]How to use pan gesture and a swipe gesture alternatively on the same view?

我有一个包含计数器的视图。

我已经实现了两种不同的手势识别器,

UISwipeGesture将计数增加一,

和一个UIPanGesture,以便每次增加多个数字

用户刷卡的时间。

两种姿势都有效,但我的问题是它们不能同时工作。

我希望他们能够交替工作,例如,如果我做小滑动的话

计数器应该增加1,如果我继续向上拖动计数器

应该增加多个数字。

这是我的代码的一部分:

```

override func viewDidLoad() {
    super.viewDidLoad()

    setupSwipeGestures()
    setupPanGestures()
} 

private func setupSwipeGestures() {
    let swipeUp = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:"))
    let swipeDown = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:"))

    swipeUp.direction = .Up
    swipeDown.direction = .Down

    circleView.addGestureRecognizer(swipeUp)
    circleView.addGestureRecognizer(swipeDown)
}


private func setupPanGestures() {
    let panGesture = UIPanGestureRecognizer(target: self, action: Selector("handleThePan:"))
    circleView.addGestureRecognizer(panGesture)
}



extension UIPanGestureRecognizer {
    func isDown(circleView: UIView) -> Bool {
       let velocity : CGPoint = velocityInView(circleView)
         if velocity.y < 0 {
            print("ex Gesture went up")
            return false
         } else {
            print("ex Gesture went down")
            return true
         }
     }
 }

```

PS:方法“handleSwipe”和“handlePan”包含计数器的逻辑。

滑动和平移手势无法同时被识别,因为滑动手势只是一种特殊类型的平移,必须更快,更短,并且在一个方向上。

您应该做的是设置平移手势以要求滑动手势在它们开始之前失败。 您需要设定每个的UISwipeGestureRecognizer是一个requireGestureRecognizerToFailUIPanGestureRecognizer

override func viewDidLoad() {
    super.viewDidLoad()

    let swipeGestures = setupSwipeGestures()
    setupPanGestures(swipeGestures: swipeGestures)
} 

private func setupSwipeGestures() -> [UISwipeGestureRecognizer] {
    let swipeUp = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:"))
    let swipeDown = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:"))

    swipeUp.direction = .Up
    swipeDown.direction = .Down

    circleView.addGestureRecognizer(swipeUp)
    circleView.addGestureRecognizer(swipeDown)

    return [swipeUp, swipeDown]
}

private func setupPanGestures(swipeGestures: [UISwipeGestureRecognizer]) {
    let panGesture = UIPanGestureRecognizer(target: self, action: Selector("handleThePan:"))
    for swipeGeature in swipeGestures {
        panGesture.requireGestureRecognizerToFail(swipeGesture)
    }
    circleView.addGestureRecognizer(panGesture)
}

斯威夫特3

override func viewDidLoad() {
    super.viewDidLoad()

    let swipeGestures = setupSwipeGestures()
    setupPanGestures(swipeGestures: swipeGestures)
}

private func setupSwipeGestures() -> [UISwipeGestureRecognizer] {
    let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(self.handleSwipes))
    let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(self.handleSwipes))

    swipeUp.direction = .up
    swipeDown.direction = .down

    circleView.addGestureRecognizer(swipeUp)
    circleView.addGestureRecognizer(swipeDown)

    return [swipeUp, swipeDown]
}

private func setupPanGestures(swipeGestures: [UISwipeGestureRecognizer]) {
    let panGesture = UIPanGestureRecognizer.init(target: self, action:#selector(self.handleThePanUp))
    for swipeGesture in swipeGestures {
        panGesture.require(toFail: swipeGesture)
    }
    circleView.addGestureRecognizer(panGesture)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM