swiftscenekitscnnodesceneview

How do I make a scnView smaller than the screen size?


ViewController

import UIKit
import SceneKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let scnView = self.view as SCNView

        scnView.backgroundColor = UIColor.blackColor()

        let sizeScnView = CGSize(width: 100.0, height: 100.0)
        let centerView = CGPoint(x: CGRectGetMidX(self.view.frame) - sizeScnView.width/2, y: CGRectGetMidY(self.view.frame) - sizeScnView.height/2)
        let scene = Tile(frame: CGRect(origin: centerView, size: sizeScnView))
        scnView.scene = scene
    }
}

Tile

import UIKit
import SceneKit

class Tile: SCNScene {

    override init() {
        super.init()

        let ball = SCNSphere(radius: 0.5)
        let ballNode = SCNNode(geometry: ball)
        ball.firstMaterial?.diffuse.contents = UIColor.orangeColor()
        self.rootNode.addChildNode(ballNode)

    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

Solution

  • Just reading this article do not know if the Question is still open I am running this in a small test seems to work fine

    class ViewController: UIViewController {
       var sceneView: SCNView!
       var camera: SCNNode!
       var light: SCNNode!
       var sphere1: SCNNode!
       override func viewDidLoad() {
        super.viewDidLoad()
         let sizeScnView = CGSize(width: 420.0, height: 580.0)
         let centerView = CGPoint(x: CGRectGetMidX(self.view.frame) - sizeScnView.width/2, y: CGRectGetMidY(self.view.frame) - sizeScnView.height/2)
        sceneView = SCNView(frame: CGRect(origin: centerView, size: sizeScnView))
        sceneView.scene = SCNScene()
        self.view.addSubview(sceneView)
        sceneView.backgroundColor = UIColor.blackColor()
        let camera = SCNCamera()
        camera.zFar = 10000
        self.camera = SCNNode()
        self.camera.camera = camera
        self.camera.position = SCNVector3(x: -20, y: 55, z: 20)
        let constraint = SCNLookAtConstraint(target: ground)
        constraint.gimbalLockEnabled = true
        self.camera.constraints = [constraint]
    
        let ambientLight = SCNLight()
        ambientLight.color = UIColor.darkGrayColor()
        ambientLight.type = SCNLightTypeAmbient
        self.camera.light = ambientLight
    
        let spotLight = SCNLight()
        spotLight.type = SCNLightTypeSpot
        spotLight.castsShadow = true
        spotLight.spotInnerAngle = 70.0
        spotLight.spotOuterAngle = 90.0
        spotLight.zFar = 500
        light = SCNNode()
        light.light = spotLight
        light.position = SCNVector3(x: 0, y: 25, z: 25)
        light.constraints = [constraint]
    
        let sphereGeometry = SCNSphere(radius: 1.5)
        let sphereMaterial = SCNMaterial()
        sphereMaterial.diffuse.contents = UIColor.greenColor()
        sphereGeometry.materials = [sphereMaterial]
        sphere1 = SCNNode(geometry: sphereGeometry)
        sphere1.position = SCNVector3(x: -15, y: 1.5, z: 0)
    
       sceneView.scene?.rootNode.addChildNode(self.camera)
       sceneView.scene?.rootNode.addChildNode(light)
       sceneView.scene?.rootNode.addChildNode(sphere1)
    
    
       }
    }