我有一个动画SCNNodes
由按钮触发。随后按下该按钮,动画就会反转。前进动画总是工作正常,但后退动画有时会挂起。也就是说,它将播放完成处理程序之前的部分,然后冻结。但是,当我应用三个手势(平移、平移、缩放)中的任何一个时,它会取消挂起并完成处理程序部分。相关代码:
else if buttonToggle_1 == true { buttonToggle_1 = false
let moveWaterBack = SCNAction.moveTo(homePosition_2, duration: 1)
let moveValineBack = SCNAction.moveTo(awayPosition_1, duration: 1)
atomsNode_3.hidden = false
bondsNode_3.hidden = false
hideTransients(true)
atomsNode_3.runAction(moveWaterBack)
bondsNode_3.runAction(moveWaterBack,
completionHandler: {
self.atomsNode_2.runAction(moveValineBack) ;
self.bondsNode_2.runAction(moveValineBack) ;
self.atomsNode_3.removeFromParentNode() ;
self.bondsNode_3.removeFromParentNode() ;
hideTransients(false)
})
}
The hideTransients())
call 取消隐藏五个节点,通过名称访问它们。有时完成会挂起,有时不会。但是,如果它挂在保留在同一页面上的特定会话中,则它将在后续按钮切换时继续挂起。我还没弄清楚其中的因果关系。我已经改变了removeFromParentNode()
打电话给hidden = true
目前这正在发挥作用,但让我不敢依赖。
这里究竟会发生什么?
编辑1:虽然它一直工作得相当一致,但我使用后面提到的代码已经看到几次挂起(很多次),所以这并不严格是由于removeFromParentNode()
calls.
调用SCNNode.removeFromParentNode()
在我看来,一个动作似乎很可疑。我还看到过另一种情况,这似乎导致了不稳定的行为,尽管没有文档表明您不应该这样做。
我认为存在SCNAction.removeFromParentNode()
是一个相当大的提示,调用该操作比直接操作节点树更好。
Using SCNAction.group()
and SCNAction.sequence()
会让你的代码更简单一些。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)