当前位置: 首页 > 知识库问答 >
问题:

动作完成处理程序等待手势执行

茅炯
2023-03-14

我有一个按钮触发的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)
                    })
            }

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

这里到底会发生什么?

编辑1:虽然它一直运行得很稳定,但我已经见过几次(在很多次中)使用后一种代码时出现的挂断,所以这并不是严格地归因于removeFromParentNode()调用。

共有1个答案

翟善
2023-03-14

调用SCNNode。removeFromParentNode()在我看来,一个动作中的removeFromParentNode()是可疑的。我还见过另一个案例,它似乎导致了不稳定的行为,尽管没有文件表明你不应该这样做。

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

使用SCNAction。组()SCNAction。sequence()会让你的代码更简单一些。

 类似资料:
  • 我已经在一个订单中链接了一组Spring批处理作业。 我怀疑任务执行者。在独立的情况下,我们不指定任何任务执行器(默认值为SyncTaskExecutor),作业流工作正常。但是在Jboss中部署时,我们使用SimpleAsyncTaskExecutor,因为在Jboss中使用SyncTaskExecutor甚至不会触发作业。 我在这里错过了什么,或者我在这里做错了什么。?请建议。

  • 问题内容: 标题中已经存在的问题-如何使python脚本等到通过os.system()调用启动的某个过程完成?例如类似的代码 这将同时启动n次请求的进程,这可能会使我的PC有点汗水) 感谢您的任何建议。 问题答案: os.system() 确实 等待其过程完成后才返回。 如果您看到它不等待,则您正在启动的进程很可能会自行分离以在后台运行。在这种情况下,子进程。Popen+ wait示例Dor提供了

  • 问题内容: 我正在尝试为UIImageView设置动画,然后在动画完成后隐藏图像视图。但是,在动画完成之前imageview被隐藏了。我看过类似的问题,他们建议在完成后在动画代码中实现动画侦听器或执行.hidden代码,但是我不确定如何在下面的shockView()函数中影响此效果。 仅在动画完成后,如何显示摇动动画并隐藏图像视图? 使用以下代码调用动画: 动画功能本身如下所示: 问题答案: 动画

  • 问题内容: 问题描述 : - 步骤1: 在主线程中从用户那里获取输入FILE_NAME。 步骤2: 对该文件执行10个操作(即,计数字符,计数行等。),所有这10个操作必须位于单独的线程中。这意味着必须有10个子线程。 步骤3: 主线程等待,直到所有那些子线程完成。 步骤4: 打印结果。 我做了什么 :- 我用3个线程做了一个示例代码。 我不希望您遇到文件操作代码。 问题:- 我上面的代码没有给出

  • 我想在C#中处理子目录和文件的文件系统/文件夹。我正在使用TPL库中的任务。这个想法是递归地执行它并为每个文件夹创建一个任务。主线程应该等待子线程完成,然后打印一些信息。事实上我只是想知道扫描何时完成。我已经开始使用线程池,然后切换到TLP。做了一些简单的例子。经过一些尝试从简单的代码到越来越臃肿的代码我被困在这里: 主线程有时仍然过早地继续,而不是在完成所有其他线程之后继续。(我对C#比较陌生,

  • 我正在运行的服务器应用程序获取我要使用任务系统处理的多个任务请求。 每个任务都表示为一个可运行的线程池,该线程池中的线程数小于或等于线程池的大小,需要线程池中的线程数。当然,线程池是必要的,以避免CPU因线程过多而过载。 然而,其中一些任务可以是多线程的,而另一些则不能。这就是为什么一个任务可能需要等待其所有特定线程完成,以便合并这些线程的结果以获得最终结果的原因。 如果使用多个实例,则可以像这样