As mentioned in the other responses, there is currently no mechanism for chaining animations in SwiftUI, but you don’t necessarily need to use a manual timer. Instead, you can use the delay
function on the chained animation:
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()
}
I’ve found this to result in more consistently smoother chained animations than using a DispatchQueue
or Timer
, possibly because it is using the same scheduler for all the animations.
Juggling all the delays and durations can be a hassle, so an ambitious developer might abstract out the calculations into some global withChainedAnimation
function than handles it for you.