UIView上面介绍了SKScene - 为什么触摸始终会到达现场?

Qua*_*ntm 5 touch ios sprite-kit swift

我有一个令人困惑的情况.首先,这是代码:

class MyView: SKView {
    ...
    public override func awakeFromNib() {
        super.awakeFromNib()
        let gameScene = MyGameScene(...)
        // ...
        presentScene(gameScene)

        let view = UIView()
        view.frame = bounds
        view.isUserInteractionEnabled = true
        addSubview(view)
    }
    ...
}

class MyGameScene: SKScene {
    ...
    public override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("touch received")
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我有一个SKView提出来的SKScene.在呈现之后,我添加了一个UIView填满屏幕的内容.然而,当我启动应用程序并点击屏幕时,会打印"触摸接收",这意味着触摸到达了场景,应该在后面view.这是为什么?

我该怎么做才能防止它呢?

我还尝试在视图中添加手势识别器.但是它并没有阻止这个问题(即使我设置cancelsTouchesInView为true)

谢谢你的帮助.

Kam*_*l.S 0

看来您正在尝试实现某种 HUD。SceneKit 不是纯粹的 UIKit,因此您需要调整您的方法 - 一些想法:

  • UIButton应该仍然可以像这里提到的那样工作: 向 sceneKit 视图添加了按钮,但它有一个滞后
  • 点击手势识别器附加到SCNView/sf/answers/3008752421/
  • 如果您确实需要这个特殊功能,UIView您可以将其渲染为图像并在那里使用SKSpriteNodewithSKTexture和 handler 触摸。
  • 不太推荐,但作为最后的手段,你可以UIView直接将你的添加到UIWindow