ios - 上面的 UIView 呈现 SKScene - 为什么触摸总是通过场景?

标签 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 后面。这是为什么?

我能做些什么来阻止它?

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

感谢您的帮助。

最佳答案

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

关于ios - 上面的 UIView 呈现 SKScene - 为什么触摸总是通过场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46611992/

相关文章:

ios - 重用UICell时如何刷新UITableView

regex - 如何替换 Swift 中的第一次出现?

ios - 'identity' 在 SwifUI 中是什么意思以及我们如何更改某些东西的 'identity'

Swift Joint - 为 CoreLocation 创建发布者

IOS Charts 折线图 View Double 值无法转换为 Int,因为要么是无穷大

xcode - 无法让自定义类在 SpriteKit 场景中工作(swiftui 和 xcode beta)

ios - 在 Swift Sprite Kit 中核心数据可用吗?

swift - 方法与父类(super class)中的方法冲突 - 重写会出错

iOS 使用彩色动画按钮点击不起作用

ios - 如何在iOS中获得上个月的第一天