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
SAVE 50% To celebrate WWDC23, all our books and bundles are half price, so you can take your Swift knowledge further without spending big! Get the Swift Power Pack to build your iOS career faster, get the Swift Platform Pack to builds apps for macOS, watchOS, and beyond, or get the Swift Plus Pack to learn advanced design patterns, testing skills, and more.
Link copied to your pasteboard.