我有一个令人困惑的情况。首先,这是代码:
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)
感谢您的帮助。
答案 0 :(得分:0)
似乎你正试图实现某种HUD。 SceneKit不是纯粹的UIKit所以你需要调整你的方法 - 一些想法:
UIButton
仍应如此处所述:
added button to sceneKit view but it has a lag SCNView
的手势识别器:
https://stackoverflow.com/a/42982177/5329717 UIView
,你可以将其渲染为图像,并使用SKSpriteNode
SKTexture
并处理那里的触摸。UIView
直接添加到UIWindow
答案 1 :(得分:0)
如果将视图添加到SKView
的超级视图(即将其添加到呈现视图控制器),则会解决您的问题。
所以你可以尝试沿着这些方向做点什么:
let view = UIView()
view.frame = bounds
view.isUserInteractionEnabled = true
superview?.addSubview(view)
或者你可以将它添加到窗口中,但实际上并不推荐这样做。