title: SCNCamera moving camera's pivot
body: <p>I need to focus to certain node, for example a pyramid. Then apply distance to the camera, then move the camera based on user click. My approach is like this :</p>
  
  <pre><code>import SceneKit
  
  class GameViewController: UIViewController {
  let scene = SCNScene()
  override func viewDidLoad() {
      super.viewDidLoad()
      let camera = SCNCamera()
      camera.usesOrthographicProjection = true
      camera.orthographicScale = 4
      camera.zNear = 1
      camera.zFar = 100
      let cameraNode = SCNNode()
      cameraNode.position = SCNVector3(x: 0, y: 0, z: 6)
      cameraNode.camera = camera
      let cameraOrbit = SCNNode()
      cameraOrbit.name = "orbit"
      cameraOrbit.addChildNode(cameraNode)
      scene.rootNode.addChildNode(cameraOrbit)
  
      let Py = SCNPyramid(width: 2, height: 3, length: 2)
      Py.firstMaterial?.diffuse.contents = UIColor.purple()
      let P = SCNNode(geometry: Py)
      P.position = SCNVector3(x:0,y:0,z:2) //see the note
      scene.rootNode.addChildNode(P)
  
      /* N O T E :
       the position of the pyramid must not be changed
       as my intention is to rotate the camera
       not the pyramid node
       I repeat, I don't want to rotate the pyramid
       */
  
      let scnView = self.view as! SCNView
      scnView.scene = scene
      scnView.allowsCameraControl = false
      scnView.backgroundColor = UIColor.black()
  
      // user rotates the camera by tapping
      let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
      scnView.addGestureRecognizer(tapGesture)
  }
  
  
  //the function which does camera rotation :
  func handleTap(_ gestureRecognize: UIGestureRecognizer) {
      //I guess the solution is around here
      //like modify the cameraOrbit.position ?
      //or cameraNode.position ?
      //tried both but doesn't work
      //or I used them wrong
      let cameraOrbit = scene.rootNode.childNode(withName: "orbit", recursively: true)!
      SCNTransaction.begin()
      SCNTransaction.animationDuration = 2
      cameraOrbit.eulerAngles.z += Float(M_PI_2) //see below
      SCNTransaction.commit()
      /*
       I realise that by performing rotation on the camera
       (the camera position is unchanged) works for z rotation,
       but this is not what I want. What I want is a solution,
       which also works for eulerAngles.x and eulerAngles.y.
  
       I used eulerAngles.z as example since it's easier to observe.
  
       I guess the true solution involves moving the camera
       with specific trajectory, not only rotation of "anchored" camera.
       */
       }
  
  //...
  }
  </code></pre>
  
  <p>The result is :</p>
  
  <p><img src="https://i.stack.imgur.com/sqmBn.png" alt="the triangle rotates around a point below the apex"></p>
  
  <p>What I want to achieve is to make the rotation relative to its centre :</p>
  
  <p><img src="https://i.stack.imgur.com/QoviR.png" alt="like this"></p>
  
  <p>My question is, how to adjust the pivot so I can achieve the rotation relative to the pyramid's centre?</p>
  
  <p>Note : I don't want to rotate the pyramid.</p>