I can programmatically create a 3D cube in iOS using the code below. However, I need to use gestures to define its size. With a pinch gesture
I'd like to build a base of cube in XZ axis. And with a drag gesture
I'd like to build a height of cube in Y axis.
The question is: How to construct a 3D cube using these two gestures?
Here's my code:
import UIKit
import SceneKit
class GameViewController: UIViewController {
var scnView: SCNView!
var scnScene: SCNScene!
var cameraNode: SCNNode!
override func viewDidLoad() {
super.viewDidLoad()
self.setupView()
self.setupScene()
self.setupCamera()
self.spawnShape()
}
override func shouldAutorotate() -> Bool {
return true
}
override func prefersStatusBarHidden() -> Bool {
return true
}
func setupView() {
scnView = self.view as! SCNView
scnView.allowsCameraControl = true
scnView.autoenablesDefaultLighting = true
}
func setupScene() {
scnScene = SCNScene()
scnView.scene = scnScene
scnScene.background.contents = UIImage(named: "bgTexture.png")
}
func setupCamera() {
cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(x: 0, y: 0, z: 12)
scnScene.rootNode.addChildNode(cameraNode)
}
func spawnShape() {
var geometry: SCNGeometry = SCNBox(width: 1.0,
height: 1.0,
length: 1.0,
chamferRadius: 0.1)
let geometryNode = SCNNode(geometry: geometry)
scnScene.rootNode.addChildNode(geometryNode)
}
}
Here's how I tried to implement UIPinchGestureRecognizer() and UIPanGestureRecognizer().
var pinchGesture = UIPinchGestureRecognizer()
var dragGesture = UIPanGestureRecognizer()
override func viewDidLoad() {
super.viewDidLoad()
setupView()
setupScene()
setupCamera()
spawnShape()
self.scnView.userInteractionEnabled = true
self.scnView.multipleTouchEnabled = true
pinchGesture = UIPinchGestureRecognizer(target: self,
action: #selector(pinchRecognized))
dragGesture = UIPanGestureRecognizer(target: self,
action: #selector(panRecognized))
self.scnView.addGestureRecognizer(self.pinchGesture)
self.scnView.addGestureRecognizer(self.dragGesture)
}
@IBAction func pinchRecognized(pinch: UIPinchGestureRecognizer) { ... }
@IBAction func panRecognized(pan: UIPanGestureRecognizer) { ... }