我有一个困惑的情况。首先,这是代码:
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
后面。这是为什么?
我能做些什么来阻止它?
我还尝试在 View 中添加一个手势识别器。但是,它并不能阻止这个问题(即使我将 cancelsTouchesInView
设置为 true)
感谢您的帮助。
最佳答案
您似乎正在尝试实现某种 HUD。 SceneKit 不是纯 UIKit,因此您需要调整您的方法 - 一些想法:
UIButton
应该仍然像这里提到的那样工作: added button to sceneKit view but it has a lag- 附加到
SCNView
的点击手势识别器: https://stackoverflow.com/a/42982177/5329717 - 如果您确实需要这个特定的
UIView
,您可以将其渲染为图像并使用带有SKTexture
的SKSpriteNode
并在那里处理触摸。 - 不推荐,但作为最后的手段,您可以将
UIView
直接添加到UIWindow
关于ios - 上面的 UIView 呈现 SKScene - 为什么触摸总是通过场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46611992/