iPhoneボールくるくる

pivot使ってボールをくるくる動かすiPhoneアプリのサンプルコードを描いてみます。

import UIKit

import SceneKit

class ViewController: UIViewController {

    weak var sceneView : SCNView?

    

    override func viewDidLoad() {

        super.viewDidLoad()

        setupScene()

        createBall()

        createCamera()

    }

    func setupScene() {

        let sv = SCNView(frame: view.bounds)

        sv.backgroundColor = UIColor.whiteColor()

        sv.scene = SCNScene()

        sv.autoenablesDefaultLighting = true

        sv.allowsCameraControl = true

        view.addSubview(sv)

        

        sceneView = sv;

    }

    

    func createBall() {

        let ball = SCNSphere(radius: 1)

        ball.firstMaterial?.diffuse.contents = UIColor.redColor()

        let ballNode = SCNNode(geometry: ball)

        ballNode.pivot = SCNMatrix4MakeTranslation(0, 1, 1)

        sceneView?.scene?.rootNode.addChildNode(ballNode)

        

        ballNode.runAction(

            SCNAction.repeatActionForever(

                SCNAction.sequence([

                    SCNAction.moveTo(SCNVector3(x: 5, y: 0, z: 0), duration: 1.5),

                    SCNAction.moveTo(SCNVector3(x: –5, y: 0, z: 0), duration: 1.5)

                ])

            ));

        ballNode.runAction(

            SCNAction.repeatActionForever(

                SCNAction.rotateByX(CGFloat(M_PI), y: 0, z: 0, duration: 0.2)

            ));

    

        let bar = SCNBox(width: 10, height: 1, length: 1, chamferRadius: 0.2)

        bar.firstMaterial?.diffuse.contents = UIColor.brownColor()

        let barNode = SCNNode(geometry: bar)

        sceneView?.scene?.rootNode.addChildNode(barNode)

    }

    

    func createCamera() {

        let camera = SCNNode()

        camera.camera = SCNCamera()

        camera.position = SCNVector3(x: 0, y: 0, z: 20)

        sceneView?.scene?.rootNode.addChildNode(camera)

    }

}