ie Position der @ Knotengruppe wird zu Beginn von SCNNode.runAction @ zurückgesetz

Ich habe Code, der mehrere SCNNodes um die x-Achse dreht, wenn auf den Bildschirm getippt wird:

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

Das Problem, auf das ich stoße, ist, dass sich die Knoten jedes Mal, wenn diese Funktion aufgerufen wird, auf ihre ursprüngliche Position zurückzusetzen scheinen, bevor die Aktion ausgeführt wird. Wenn die Aktion abgeschlossen ist, scheinen sie an der richtigen Stelle zu bleiben, bis Sie erneut auf den Bildschirm tippen. Wie tätige ich nachfolgende Anrufe beihandleTap drehen sie von ihrer aktuellen Position?

Ich habe versucht, die Knoten von ihrem ursprünglichen übergeordneten Element zu entfernen, bevor sie dem Container hinzugefügt wurden, aber es hat keine sichtbaren Auswirkungen.

Ich habe auch versucht mit einer Animation

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

Welche genau die gleiche Wirkung hatte wie die Aktion.

Wenn ich die Knoten als untergeordnete Elemente der Stammansicht in den vollständigen Block der runAction zurücksetze

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

Dann werden die Knoten nach Abschluss der Aktion an ihre ursprüngliche Position zurückgesetzt und nicht zu Beginn eines neuen Abgriffs.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage