A posição do grupo de nós é redefinida no início de SCNNode.runAction

Eu tenho algum código que gira vários SCNNodes ao redor do eixo x quando a tela é tocada da seguinte maneira:

func handleTap(gestureRecognize: UIGestureRecognizer) {
    let sceneView = self.view as SCNView

    let slice = self.cubes[0...8]
    let container = SCNNode()
    for node: SCNNode in slice {
        container.addChildNode(node)
    }
    sceneView.scene!.rootNode.addChildNode(container)
    container.runAction(SCNAction.rotateByX(CGFloat(M_PI / 2), y: 0.0, z: 0.0, duration: 1), completionHandler: { () -> Void in
        println("complete")
    })
}

O problema que eu estou enfrentando é que toda vez que essa função é chamada, os nós parecem se redefinir para sua posição original antes de executar a ação. Quando a ação é concluída, eles parecem permanecer no local correto até que a tela seja tocada novamente. Como faço chamadas subseqüentes parahandleTap girá-los de sua posição atual?

Tentei remover os nós do pai original antes de adicioná-los ao contêiner, mas ele não tem efeito visível.

Eu também tentei usar uma animação

    let spin = CABasicAnimation(keyPath: "rotation")
    spin.fromValue = NSValue(SCNVector4: SCNVector4(x: -1, y: 0, z: 0, w: 0))
    spin.toValue = NSValue(SCNVector4: SCNVector4(x: -1, y: 0, z: 0, w: Float(M_PI_2)))
    spin.duration = 3
    spin.repeatCount = .infinity
    container.addAnimation(spin, forKey: "spin around")

Qual teve exatamente o mesmo efeito que a ação.

Se eu colocar os nós de volta como filhos da visualização raiz no bloco completo de runAction

    container.runAction(action, completionHandler: { () -> Void in
        println("completed rotation")
        for node: SCNNode in slice {
            node.removeFromParentNode()
            sceneView.scene!.rootNode.addChildNode(node)
        }
    })

Em seguida, os nós retornam à sua posição original após a conclusão da ação, em vez de no início de um novo toque.

questionAnswers(1)

yourAnswerToTheQuestion