UIPanGestureRecognizer 停留在状态 begin
UIPanGestureRecognizer stays at state begin
我有一个要拖动的 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
中设置为真,但永远不会返回到假,因为 gesture.state .changed
和 .ended
永远不会被调用。
当我松开手指并再次触摸按钮时,也没有任何反应。为什么UIPanGestureRecognizer
不执行.changed
和.ended
?
谢谢。
我认为你需要检查你的 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
}
}
}
我有一个要拖动的 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
中设置为真,但永远不会返回到假,因为 gesture.state .changed
和 .ended
永远不会被调用。
当我松开手指并再次触摸按钮时,也没有任何反应。为什么UIPanGestureRecognizer
不执行.changed
和.ended
?
谢谢。
我认为你需要检查你的 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
}
}
}