Search code examples
iossprite-kitscenekitskscenescnnode

overlaySKSScene not working: SpriteKit scene does not appear in SCNView


Answers to similar questions like this and this did not solve the problem.

Assigning a SpriteKit scene to the overlaySKScene property of a SCNView does nothing: the SpriteKit scene does not appear at all.

Tested on iPhone 7 and on the Simulator.

Running the code below shows a blank white screen.

@IBOutlet weak var sceneView: SCNView!

override func viewDidLoad() {
    let skScene = SKScene(size: UIScreen.main.bounds.size)
    skScene.backgroundColor = UIColor.black
    let node = SKSpriteNode(imageNamed: "AddButton.png")
    skScene.addChild(node)

    sceneView.overlaySKScene = skScene
    sceneView.overlaySKScene!.scaleMode = .resizeFill
    sceneView.overlaySKScene?.isHidden = false
}

Solution

  • The following code works for me after setting up a default SceneKit project.

    override func viewDidLoad() {
      super.viewDidLoad()
      let scene = SCNScene(named: "art.scnassets/ship.scn")!
      let scnView = self.view as! SCNView
      scnView.scene = scene
    
      let skScene = SKScene(size: UIScreen.main.bounds.size)
      let node = SKSpriteNode(imageNamed: "testImage.png")
      skScene.addChild(node)
    
      scnView.overlaySKScene = skScene
      scnView.overlaySKScene!.scaleMode = .resizeFill
    }
    

    The overlay view wouldn't show up unless the SCNScene was set on the view, and the background colour of the SKScene had no effect.