touchesBegan not detecting touch after overlaySKScene in SCNView

I’m trying to add a HUD to an SCNView using a SKScene. After overlaying the SKScene, the touchesBegan no longer detects any screen touches. Ultimatly I want to add a button to the overlay.

import UIKit
import SceneKit
import SpriteKit

class ViewController: UIViewController, SKSceneDelegate, SCNSceneRendererDelegate {

var screenView:SCNView!
var screenScene:SCNScene!
var button = SKSpriteNode(imageNamed:"button")

let overlayScene = SKScene(size: CGSize.init(width: 100, height: 100))

override func viewDidLoad() {
    super.viewDidLoad()
    setupScene()

}

func setupScene() {
    
    screenView = SCNView(frame: self.view.frame)
    self.view.addSubview(screenView)
    screenScene = SCNScene(named: "/art.scnassets/game.scn")

    screenView.delegate = self
    screenView.scene = screenScene
    screenView.allowsCameraControl = true
    screenView.showsStatistics = false
    
    screenView.overlaySKScene = overlayScene
    screenView.overlaySKScene!.delegate = self
    screenView.overlaySKScene!.anchorPoint = CGPoint(x: 0, y: 0)
    screenView.overlaySKScene!.isUserInteractionEnabled = true
    
    ///// make a button
    button.size = CGSize(width: 6, height: 6)
    button.anchorPoint = CGPoint(x: -13.3, y: -0.5)
    button.zPosition = 0
    overlayScene.addChild(button)
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    print(NSDate())

// let touch = touches.first!
// let location = touch.location(in: overlayScene)
}

override var prefersStatusBarHidden : Bool { return true }

}

Any help is greatly appreciated!
Thanks!

EDIT: changed screenView.overlaySKScene!.isUserInteractionEnabled = false

Now touches are detected!

1 Like