Позиция группы узлов сбрасывается в начале SCNNode.runAction

У меня есть некоторый код, который вращает несколько узлов SCN вокруг оси x, когда экран нажимается так:

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")
    })
}

Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда вызывается эта функция, узлы, по-видимому, возвращаются в исходное положение перед выполнением действия. Когда действие завершено, они, кажется, остаются в правильном месте до тех пор, пока экран не будет снова нажат. Как мне сделать последующие звонкиhandleTap повернуть их из текущего положения?

Я пытался удалить узлы из их исходного родителя, прежде чем добавлять их в контейнер, но это не имеет видимого эффекта.

Я также пытался использовать анимацию

    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")

Который имел тот же эффект, что и действие.

Если я верну узлы как дочерние элементы корневого представления в полном блоке runAction

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

Затем узлы возвращаются в исходное положение после завершения действия, а не в начале нового касания.

Ответы на вопрос(1)

Ваш ответ на вопрос