SCNAction完成处理程序等待执行的手势

时间:2016-03-11 16:30:43

标签: scenekit completionhandler

我有一个由按钮触发的 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) }) } 动画。在随后按下按钮时,动画会反转。前进动画始终正常但反向动画有时会挂起。也就是说,它将在完成处理程序之前播放该部分然后冻结。但是当我应用我的三个手势中的任何一个(平移,平移,缩放)时,它会挂起并完成处理程序部分。相关代码:

hideTransients())

removeFromParentNode()调用取消隐藏五个节点,按名称访问它们。有时完成会挂起,有时它不会。但是,如果它挂在同一页面上剩余的特定会话中,它将继续挂起后续按钮切换。我还没有想出任何因果关系。我已将hidden = true来电更改为removeFromParentNode(),目前这种情况正在发挥作用,但让我很紧张。

地球上到底发生了什么?

编辑1:虽然它的工作非常一致,但我已经使用后面提到的代码看了很多次(很多次),所以这并不是严格意义上的function makeDiv(callback){ var dfd = jQuery.Deferred(); $(function() { $("#full_complete").append($(dose_credit).html()+ " " +$(storyboard).html() + " " +$(nar_name).html() + " " +$(nar_text).html()); full = $(this).closest('div').find("#full_complete"); dfd.resolve( "hurray" ); }) return dfd.promise(); } function generateImg2(){ var doc = new jsPDF(); doc.fromHTML($(full).get(0), 15, 15, { 'width': 170, }); doc.save('Test.pdf'); } 调用

1 个答案:

答案 0 :(得分:1)

在一个动作中调用SCNNode.removeFromParentNode()对我来说似乎很可疑。我已经看到另一个案例似乎导致了不稳定的行为,虽然没有文件说你不应该这样做。

我认为SCNAction.removeFromParentNode()的存在是一个非常大的提示,并且调用该操作比直接操作节点树更可取。

使用SCNAction.group()SCNAction.sequence()会使您的代码更简单。