使用完成处理程序在 Swift 中调用连续动画

Posted

技术标签:

【中文标题】使用完成处理程序在 Swift 中调用连续动画【英文标题】:Calling consecutive animations in Swift with completion handler 【发布时间】:2021-01-02 17:01:42 【问题描述】:

我正在制作一个显示化学反应动画的应用。每个原子都是一个 SCNSphere,并使用 SCNActions 进行动画处理。我正在尝试使用 runAction() 中的完成处理程序在当前动作完成后调用下一个动画,因为每个原子必须做出很多不同的动作。

这只是我为简化过程而编写的一些测试代码,实际代码将循环遍历 atom 对象的数组。

func animate() 
    let atom1 = atomNodes[0]
    atom1.runAction(atoms[0].actions[0]) 
        atom1.runAction(SCNAction.move(by: SCNVector3(-10, 0, 0), duration: 1.0))
        print("Done")
    

print("Done") 语句工作得很好,它只在动作完成后被调用,但新的 SCNAction 不会触发。我是否遗漏了一些东西来启动下一个动作?

【问题讨论】:

有理由不使用 SCNAction.sequence 吗? 是的,因为我希望能够操纵播放,据我了解,SCNAction 序列不允许您这样做。 嗯,是的,我就怕你会这么说 将您的第二个操作包含在 DispatchQueue.main.async 中。 也检查这个问题***.com/questions/56189836/… 【参考方案1】:

我最终选择了

Timer.scheduledTimer(timeInterval: stepDuration, target: self,
                     selector: #selector(self.animate), userInfo: nil, repeats: true)

类似于 James P 的评论。

【讨论】:

以上是关于使用完成处理程序在 Swift 中调用连续动画的主要内容,如果未能解决你的问题,请参考以下文章

Swift:重复的连续 CABasicAnimations

如何在swift中打开另一个动画完成视图?

从 Timer 选择器函数 Swift 调用函数的完成处理程序

在 Swift 中向 UIViewPropertyAnimator 添加完成处理程序

Swift,从一个数组中连续播放多个动画?

如何在 Swift 4 中同步执行多个自定义动画函数