Updated for Xcode 14.2
If you want a SwiftUI view to start animating as soon as it appears, you should use the onAppear()
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
}
}
}
}
Download this as an Xcode project
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 }
}
}
Download this as an Xcode project
SPONSORED Play is the first native iOS design tool created for designers and engineers. You can install Play for iOS and iPad today and sign up to check out the Beta of our macOS app with SwiftUI code export. We're also hiring engineers!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.