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

时间:2017-10-06 18:39:22

标签: ios swift sprite-kit touch

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

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")
    }
    ...
}

我有一个SKView正在展示SKScene。在呈现之后,我添加了一个填充屏幕的UIView。但是,当我启动应用程序并点击屏幕时,会打印“触摸接收”,这意味着触摸进入了场景,应该在view后面。那是为什么?

我该怎么做才能阻止它?

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

似乎你正试图实现某种HUD。 SceneKit不是纯粹的UIKit所以你需要调整你的方法 - 一些想法:

答案 1 :(得分:0)

如果将视图添加到SKView的超级视图(即将其添加到呈现视图控制器),则会解决您的问题。

所以你可以尝试沿着这些方向做点什么:

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

或者你可以将它添加到窗口中,但实际上并不推荐这样做。