UIPanGestureRecognizer保持状态开始

时间:2017-06-18 13:29:09

标签: ios swift uipangesturerecognizer

我有一个我要拖动的SpringButton。这是我的代码:

var gesture = UIPanGestureRecognizer(target: self, action: #selector(userDragged))
card.addGestureRecognizer(gesture)

var cardIsCurrentlyMoving = false

func userDragged(gesture: UIPanGestureRecognizer){
    if !cardIsCurrentlyMoving{
        if let button = gesture.view as? SpringButton {
            if gesture.state == .began {
                print("begon")
                cardIsCurrentlyMoving = true
                startPosition = button.center
            } else if gesture.state == .changed {
                print("changed")
            } else if gesture.state == .ended{
                print("ended")
                cardIsCurrentlyMoving = false
            }
        }
    }
}

调用该函数,状态变为.began。但是,当试图移动按钮时没有任何反应。这是因为cardIsCurrentlyMoving.began中设置为true,但永远不会返回false,因为gesture.state .changed.ended永远不会被调用。

当我松开手指并再次触摸按钮时,也没有任何反应。为什么UIPanGestureRecognizer无法执行.changed.ended

感谢。

1 个答案:

答案 0 :(得分:1)

我认为你需要检查你的if语句

if !cardIsCurrentlyMoving{ 

}

Pan Gesture不断调用更改状态的方法。所以userDragged func连续调用但只是因为你上面的if语句,控件不会进入if语句。

所以我建议使用它而不是你的。

func userDragged(gesture: UIPanGestureRecognizer){

        if let button = gesture.view as? SpringButton {
            if gesture.state == .began {
                print("begon")
                cardIsCurrentlyMoving = true
                startPosition = button.center
            } else if gesture.state == .changed {
                print("changed")
            } else if gesture.state == .ended{
                print("ended")
                cardIsCurrentlyMoving = false
            }
        }

}