Swift/Spritekit UILongPressGestureRecognizer 似乎在按下时忽略所有其他手势

标签 swift sprite-kit

首先,我是快速开发的新手。我正在学习,事情进展顺利,但我遇到过这个问题,似乎无法解决。我搜索过,但那里的信息不多。 SO 上与此问题相关的几个问题也没有帮助(也许我只是不知道要搜索的正确术语..?)

无论如何。

我已经为滑动、点击和长按设置了我的手势识别器。他们工作正常。当我长按时,问题就来了。长按用于触发玩家移动(技术上它移动背景图像)它有效,他动画和移动但在移动时系统无法识别任何其他手势输入。在我松开长按的那一刻,其他识别器就可以正常工作了。

在我添加的 GameViewController 中

skView.multipleTouchEnabled = true

但是没有影响。当长按处于事件状态时,它似乎仍然没有注册额外的触摸事件。我的代码在下面。

class GameScene: SKScene {
override func didMoveToView(view: SKView) {

    // gesture recognizer
    // swipe up
    let swipeUp:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(GameScene.handleSwipe(_:)))
    swipeUp.direction = .Up
    view.addGestureRecognizer(swipeUp)
    // swipe dn
    let swipeDn:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(GameScene.handleSwipe(_:)))
    swipeDn.direction = .Down
    view.addGestureRecognizer(swipeDn)
    // swipe rt
    let swipeRt:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(GameScene.handleSwipe(_:)))
    swipeRt.direction = .Right
    view.addGestureRecognizer(swipeRt)
    // swipe lt
    let swipeLt:UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(GameScene.handleSwipe(_:)))
    swipeLt.direction = .Left
    view.addGestureRecognizer(swipeLt)
    // tap
    let tapped:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(GameScene.handleTap(_:)))
    view.addGestureRecognizer(tapped)
    // long press
    let pressed:UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(GameScene.handlePress(_:)))
    pressed.minimumPressDuration = 0.1
    view.addGestureRecognizer(pressed)
}


// swipes
func handleSwipe(sender: UISwipeGestureRecognizer) {
    switch sender.direction {
    case UISwipeGestureRecognizerDirection.Right:
        swipeRT = true
        print("swipe RIGHT")
    case UISwipeGestureRecognizerDirection.Left:
        swipeLT = true
        print("swipe LEFT")
    case UISwipeGestureRecognizerDirection.Up:
        swipeUP = true
        print("swipe UP")
    case UISwipeGestureRecognizerDirection.Down:
        swipeDN = true
        print("swipe DOWN")
    default:
        print("nothing to see here")
    }
}
// taps
func handleTap(sender: UITapGestureRecognizer) {
    print("tap")
}

func handlePress(sender: UILongPressGestureRecognizer) {
    if sender.state == .Began {
        theWAY()
    }
    if sender.state == .Ended {
        player.runAction(animIdle)
        moving = false
    }
}

我意识到可能有更好/更有效的方法来实现这一目标。我 100% 愿意接受建议和批评。正如我所说,我对这整件事都很陌生。感谢您的帮助,如果这与整个“发布前搜索”相冲突,我深表歉意。我确实搜索过,我保证。

最佳答案

您可以使用 UIGestureRecognizerDelegate 方法 gestureRecognizer(_:shouldRecognizeSimultaneouslyWithGestureRecognizer:)

参见 this question and answer供引用。

关于Swift/Spritekit UILongPressGestureRecognizer 似乎在按下时忽略所有其他手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36649910/

相关文章:

swift - ReactiveCocoa 内存泄漏 - UIButton 的 CocoaAction 阻止 MVVM 对象反初始化

ios - 滚动 UITableView 时的值变化

从圆形快速射击物体

ios - Swift SpriteKit 在 SKAction.runBlock() 中运行 SKAction

ios - 纹理图集不起作用

ios - 将 scaleMode 设置为 resizeFill 时,如何在 `didMove(to view: SKView)` 中获取 SKScene 的大小?

ios - SpriteKit - 组织保存的游戏数据的最佳方式是什么?

ios - 如何测试 UIAlertController 的完成处理程序中调用的方法?

ios - UIImagePickerController - 默认情况下如何访问前置摄像头?

ios - 滚动多个单元格类型时 UITableView 滞后