gpt4 book ai didi

animation - 在 SwiftUI 中链接动画

转载 作者:行者123 更新时间:2023-12-04 15:38:44 25 4
gpt4 key购买 nike

我正在 SwiftUI 中处理相对复杂的动画,并且想知道链接各种动画阶段的最佳/最优雅的方式是什么。

假设我有一个 View ,它首先需要缩放,然后等待几秒钟然后消失(然后等待几秒钟并重新开始 - 无限期)。

如果我尝试在同一个 View /堆栈上使用多个 withAnimation() 块,它们最终会相互干扰并弄乱动画。

到目前为止,我能想到的最好方法是在初始 View .onAppear() 修饰符上调用自定义函数,并在该函数中为动画的每个阶段使用 withAnimation() 块,它们之间有延迟。所以,它基本上看起来像这样:

func doAnimations() {
withAnimation(...)

DispatchQueue.main.asyncAfter(...)
withAnimation(...)

DispatchQueue.main.asyncAfter(...)
withAnimation(...)

...

}

它最终很长而且不是很“漂亮”。我确信必须有更好/更好的方法来做到这一点,但到目前为止我尝试的一切都没有给我我想要的确切流程。

任何想法/建议/提示将不胜感激。谢谢!

最佳答案

正如其他回复中提到的,目前 SwiftUI 中没有链接动画的机制,但您不一定需要使用手动计时器。相反,您可以使用 delay链接动画的功能:

withAnimation(Animation.easeIn(duration: 1.23)) {
self.doSomethingFirst()
}

withAnimation(Animation.easeOut(duration: 4.56).delay(1.23)) {
self.thenDoSomethingElse()
}

withAnimation(Animation.default.delay(1.23 + 4.56)) {
self.andThenDoAThirdThing()
}


我发现与使用 DispatchQueue 相比,这会产生更一致、更平滑的链接动画。或 Timer ,可能是因为它对所有动画使用相同的调度程序。

处理所有延迟和持续时间可能会很麻烦,因此雄心勃勃的开发人员可能会将计算抽象为一些全局 withChainedAnimation功能而不是为您处理它。

关于animation - 在 SwiftUI 中链接动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56907344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com