它只能在持有长按的前2秒内完成。它表现得非常奇怪(无论如何)。让我试着解释......
当您按下屏幕左侧或右侧的长按时,它会按照您推动的方向启动播放器“正在运行”。当你放松时,他会停止跑步。这很好用。
当你静止不动时,如果点击,它会记录水龙头。如果你滑动,它会注册滑动(所有方向)。这很好用。
一旦你跑步就会出现问题。它像这样分解:
你开始跑了。如果你在第一个大约2秒内做任何其他输入,它会忽略初始手势。所以,如果你点击,它会忽略它。如果你等了2秒,它会看到初始手势就好了。但是......如果你立即点击(忽略它),然后点击(或滑动,任一种手势方法都可以实现这一点),它将在2秒钟内注册第二次点击/滑动。所以SOMETHING是在你开始长按之后的第一秒内发生的,它只是忽略第一次按下直到~2秒标记。我搜索了一个关于持续时间或偏移的设置,但我太新了,所以我真的不知道该搜索什么。
我的手势识别器的代码:
// swipe up
let swipeUp:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(GameScene.handleSwipe(_:)))
swipeUp.direction = .Up
swipeUp.delegate = self
view.addGestureRecognizer(swipeUp)
// swipe dn
let swipeDn:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(GameScene.handleSwipe(_:)))
swipeDn.direction = .Down
swipeDn.delegate = self
view.addGestureRecognizer(swipeDn)
// swipe rt
let swipeRt:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(GameScene.handleSwipe(_:)))
swipeRt.direction = .Right
swipeRt.delegate = self
view.addGestureRecognizer(swipeRt)
// swipe lt
let swipeLt:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(GameScene.handleSwipe(_:)))
swipeLt.direction = .Left
swipeLt.delegate = self
view.addGestureRecognizer(swipeLt)
// tap
let tapped:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(GameScene.handleTap(_:)))
tapped.delegate = self
tapped.cancelsTouchesInView = true
view.addGestureRecognizer(tapped)
// long press
let pressed:UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(GameScene.handlePress(_:)))
pressed.minimumPressDuration = 0.1
pressed.cancelsTouchesInView = false
pressed.delegate = self
view.addGestureRecognizer(pressed)
处理手势的功能:
// multiple gestures
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
if gestureRecognizer is UITapGestureRecognizer || gestureRecognizer is UISwipeGestureRecognizer || gestureRecognizer is UILongPressGestureRecognizer {
return true
} else {
return false
}
}
// taps
func handleTap(sender: UITapGestureRecognizer) {
if sender.state == .Ended {
print("tap ended")
}
}
// swipes
func handleSwipe(sender: UISwipeGestureRecognizer) {
switch sender.direction {
case UISwipeGestureRecognizerDirection.Right:
print("swipe RIGHT")
case UISwipeGestureRecognizerDirection.Left:
print("swipe LEFT")
case UISwipeGestureRecognizerDirection.Up:
print("swipe UP")
case UISwipeGestureRecognizerDirection.Down:
print("swipe DOWN")
default:
break
}
}
// longPresses
func handlePress(sender: UILongPressGestureRecognizer) {
if sender.state == .Began {
theWAY()
}
if sender.state == .Ended {
player.runAction(animIdle)
moving = false
}
}
该函数theWay()只是处理移动的代码,并且其中没有与手势识别相关的任何内容。与变量移动相同。
我在做一些明显不对的错吗?我是新手,所以我假设我的代码中有一些明显的错误,因为这是令人困惑的。我试过切换东西并使用touchesBegan / touchesEnded函数,但它没有帮助。它只会让事情变得更加混乱。帮助我过度流动 - 肯诺比......你是我唯一的希望。