使用完成处理程序在 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 中调用连续动画的主要内容,如果未能解决你的问题,请参考以下文章
从 Timer 选择器函数 Swift 调用函数的完成处理程序