fileprivate func animateMove(_ move: Move) { print("Animate move started " + move.IDentifIEr) // I am creating rotateNode let rotateNode = SCNNode() rotateNode.eulerAngles.x = CGfloat.pi scene.rootNode.addChildNode(rotateNode) // Then I am selecting nodes which I want to rotate nodesToRotate = ... // Then I am adding the nodes to rotate node _ = nodesToRotate.map { rotateNode.addChildNode(func animateMoves(_ moves: [Move]) { for (index,move) in moves.enumerated() { perform(#selector(animateMove(_:)),with: move,afterDelay: TimeInterval(Double(index) * move.duration) } }) } SCNTransaction.begin() SCNTransaction.animationDuration = move.animationDuration SCNTransaction.completionBlock = { rotateNode.enumerateChildNodes { node,_ in node.transform = node.worldtransform node.removeFromparentNode() scene.rootNode.addChildNode(node) } rotateNode.removeFromparentNode() print("Animate move finished " + move.IDentifIEr) } SCNTransaction.commit()}
然后我尝试运行多个串行动画,如下所示:
Animate move started 1Animate move started 2Animate move finished 1Animate move finished 2Animate move started 3Animate move finished 3
一切都是动画,但动画不是以连续的方式运行.动画在不可预测的时间内开始和结束.
来自调试器的示例日志:
class func sequence([SCNAction])
我意识到我的方法不是最好的,但只有通过这种方式,我才能实现几乎可以工作的动画.
我知道有一个SCNAction类可用.也许我应该在一次交易中做出很多动作?如果是这样,有人可以向我解释SCNTransactions究竟是如何工作的以及SCNTransaction的完成块在不可预测的时间内完成的原因是什么?
解决方法 尝试使用SCNAction.sequence():let sequence = SCNAction.sequence([action1,action2,action3]) // will be executed one by onelet node = SCNNode()node.runAction(sequence,completionHandler:nil)
创建一个按顺序运行 *** 作集合的 *** 作
总结以上是内存溢出为你收集整理的ios – SceneKit中的多个串口动画全部内容,希望文章能够帮你解决ios – SceneKit中的多个串口动画所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)