SceneKit操作无法在完成处理程序中触发新操作

时间:2018-08-19 13:36:15

标签: ios swift scenekit

我正在尝试在另一个动作的完成处理程序中触发一个动作,但它的行为不像我预期的那样。

似乎已创建并添加了该动作,但是它已排队并且仅在触发某些其他动作时才执行。在此示例中,您将看到第一个水龙头将多维数据集旋转了180度,然后在每个水龙头处旋转了360度(打印a,b,a 2个水龙头)。谁能解释为什么它会这样?我想我可以使用动作序列来解决它,但我想以这种方式实现。

class ViewController: UIViewController {
    @IBOutlet weak var sceneView: SCNView!
    var cube: SCNNode?

    override func viewDidLoad() {
        super.viewDidLoad()

        let scene = SCNScene()
        let boxGeometry = SCNBox(width: 10.0, height: 10.0, length: 10.0, chamferRadius: 1.0)
        cube = SCNNode(geometry: boxGeometry)
        scene.rootNode.addChildNode(cube!)
        sceneView.scene = scene
        sceneView.autoenablesDefaultLighting = true

        let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.handleTap(_:)))
        sceneView.addGestureRecognizer(tapRecognizer)
    }

    @objc internal func handleTap(_ gestureRecognizer: UIGestureRecognizer) {
        cube?.runAction(SCNAction.rotateBy(x: 3.1415, y: 0, z: 0, duration: 0.5), completionHandler: {
            print("a")
            self.cube?.runAction(SCNAction.rotateBy(x: 3.1515, y: 0, z: 0, duration: 0.5), completionHandler: {
                print("b")
            })
        })
    }
}

编辑:我可以通过在外部完成处理程序中调用self.sceneView.play(nil)来解决它,但是我仍然很好奇为什么场景需要此触发器来执行我的动作(并且我愿意寻求更优雅的解决方案)。

0 个答案:

没有答案