我正在尝试在另一个动作的完成处理程序中触发一个动作,但它的行为不像我预期的那样。
似乎已创建并添加了该动作,但是它已排队并且仅在触发某些其他动作时才执行。在此示例中,您将看到第一个水龙头将多维数据集旋转了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)
来解决它,但是我仍然很好奇为什么场景需要此触发器来执行我的动作(并且我愿意寻求更优雅的解决方案)。