How to start an animation immediately after a view appears
About 2 min
How to start an animation immediately after a view appears 관련
SwiftUI by Example
Back to Home
How to start an animation immediately after a view appears | SwiftUI by Example
How to start an animation immediately after a view appears
Updated for Xcode 15
If you want a SwiftUI view to start animating as soon as it appears, you should use the nAppear()
modifier to attach an animation. I’ll show you the basic code first, then show you two extensions I use to make this process easier.
First, the simple version – this creates a circle that scales up and down forever:
struct ContentView: View {
@State var scale = 1.0
var body: some View {
Circle()
.frame(width: 200, height: 200)
.scaleEffect(scale)
.onAppear {
let baseAnimation = Animation.easeInOut(duration: 1)
let repeated = baseAnimation.repeatForever(autoreverses: true)
withAnimation(repeated) {
scale = 0.5
}
}
}
}
If you intend to add initial animations frequently, it’s a smart idea to add some extensions to the View
protocol to make it easier.
To demonstrate this, the two extensions below add animate()
and animateForever()
modifiers that let you customize the animation you want and also wrap up the whole behavior neatly:
// Create an immediate animation.
extension View {
func animate(using animation: Animation = .easeInOut(duration: 1), _ action: @escaping () -> Void) -> some View {
onAppear {
withAnimation(animation) {
action()
}
}
}
}
// Create an immediate, looping animation
extension View {
func animateForever(using animation: Animation = .easeInOut(duration: 1), autoreverses: Bool = false, _ action: @escaping () -> Void) -> some View {
let repeated = animation.repeatForever(autoreverses: autoreverses)
return onAppear {
withAnimation(repeated) {
action()
}
}
}
}
// Try out our extensions with the scaling circle.
struct ContentView: View {
@State var scale = 1.0
var body: some View {
Circle()
.frame(width: 200, height: 200)
.scaleEffect(scale)
.animateForever(autoreverses: true) { scale = 0.5 }
}
}
Similar solutions…
How to make a ScrollView start at the bottom | SwiftUI by Example
How to make a ScrollView start at the bottom
SwiftUI tips and tricks | SwiftUI by Example
SwiftUI tips and tricks
How to follow this quick start guide | SwiftUI by Example
How to follow this quick start guide
How to create an explicit animation | SwiftUI by Example
How to create an explicit animation
How to create a spring animation | SwiftUI by Example
How to create a spring animation