title: SceneKit cube rotation with multiple UIPanGestureRecognizers
body: <p>Thanks for taking a look at this. I'm sure it is something very basic.  I am a beginner.  </p>
  
  <p>I am trying to rotate a cube in in a SceneKit view with pan gestures.  I have so far been successful in load this sample app onto my iPad and panning my finger on the y axis to rotate the cube on its x axis, or panning along the screens x-axis to rotate the cube along its y-axis.</p>
  
  <p>Currently, I've noticed that whichever gesture recognizer is added last to the sceneView is the one that works. My question <strong>is how can I have the cube respond to either a x pan gesture then a y pan gesture or vice versa.</strong>  </p>
  
  <p>Here is the code I have written so far:</p>
  
  <pre><code>import UIKit
  import SceneKit
  
  class ViewController: UIViewController {
  
    //geometry
    var geometryNode: SCNNode = SCNNode()
  
    //gestures
    var currentYAngle: Float = 0.0
    var currentXAngle: Float = 0.0
  
    override func viewDidLoad() {
      super.viewDidLoad()
  
      sceneSetup()  
    }
  
    func sceneSetup () {
      //setup scene
      let scene = SCNScene()
      let sceneView = SCNView(frame: self.view.frame)
      self.view.addSubview(sceneView)
  
      //add camera
      let camera = SCNCamera()
      let cameraNode = SCNNode()
      cameraNode.camera = camera
      cameraNode.position = SCNVector3(x: 0.0, y: 0.0, z: 5.0)
  
      //add light
      let light = SCNLight()
      light.type = SCNLightTypeOmni
      let lightNode = SCNNode()
      lightNode.light = light
      lightNode.position = SCNVector3(x: 1.5, y: 1.5, z: 1.5)
  
      //add cube
      let cubeGeometry = SCNBox(width: 1.0, height: 1.0, length: 1.0, chamferRadius: 0.0)
      let boxNode = SCNNode(geometry: cubeGeometry)
  
      scene.rootNode.addChildNode(lightNode)
      scene.rootNode.addChildNode(cameraNode)
      scene.rootNode.addChildNode(boxNode)
  
      geometryNode = boxNode
  
      //add recognizers
      let panXRecognizer = UIPanGestureRecognizer(target: self, action: "rotateXGesture:")
      let panYRecognizer = UIPanGestureRecognizer(target: self, action: "rotateYGesture:")
      sceneView.addGestureRecognizer(panXRecognizer)
      sceneView.addGestureRecognizer(panYRecognizer)
  
      sceneView.scene = scene
    }
  
    func rotateXGesture (sender: UIPanGestureRecognizer) {
      let translation = sender.translationInView(sender.view)
      var newXAngle = (Float)(translation.y)*(Float)(M_PI)/180.0
      newXAngle += currentXAngle
  
      geometryNode.transform = SCNMatrix4MakeRotation(newXAngle, 1, 0, 0)
  
      if(sender.state == UIGestureRecognizerState.Ended) {
        currentXAngle = newXAngle
      }
    }
  
    func rotateYGesture (sender: UIPanGestureRecognizer) {
      let translation = sender.translationInView(sender.view)
      var newYAngle = (Float)(translation.x)*(Float)(M_PI)/180.0
      newYAngle += currentYAngle
  
      geometryNode.transform = SCNMatrix4MakeRotation(newYAngle, 0, 1, 0)
  
      if(sender.state == UIGestureRecognizerState.Ended) {
        currentYAngle = newYAngle
      }
    }
  }
  </code></pre>