انیمیشن های ضمنی (Implicit Animations)
«انیمیشن ضمنی (Implicit Animation)» یعنی انیمیشن خودکار با تغییر وضعیت. وقتی مقدار state عوض شود، نما نرم حرکت می کند. مثل وقتی در بازی، نوار جان آرام بزرگ می شود. این روش ساده و سریع است.
ایده اصلی در یک نگاه
کافی است به نما یک .animation(..., value: state) وصل کنی. سپس هر تغییری که به state وابسته است، خودکار انیمیت می شود. بنابراین نیاز نیست دستی زمان بندی کنی.
نکته: برای موارد ساده، انیمیشن ضمنی بهترین شروع است. چون کد تمیز می ماند.
سینتکس پایه
الگو این است: .animation(.easeInOut, value: state). هر modifier که به state وابسته باشد، با تغییر آن، نرم تغییر می کند.
مثال 1: با تپ بزرگ شو
دایره با تپ، بزرگ تر می شود. رنگ هم تغییر می کند. همه چیز با یک انیمیشن ضمنی انجام می شود.
import SwiftUI
struct ImplicitAnimDemo: View {
@State private var on = false
var body: some View {
VStack(spacing: 12) {
Circle()
.fill(on ? .green : .gray)
.frame(width: on ? 120 : 60, height: on ? 120 : 60)
.animation(.spring(), value: on)
Button(on ? "Reset" : "Grow") {
on.toggle()
}
}
.padding()
}
}
struct ContentView: View {
var body: some View {
ImplicitAnimDemo()
}
}
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
چون دکمه مقدار on را عوض می کند، اندازه و رنگ دایره نرم عوض می شوند.
مثال 2: چند تغییر با یک انیمیشن
می توانی چند خصوصیت را همزمان انیمیت کنی. اندازه، شفافیت، و رنگ با یک state کنترل می شوند.
import SwiftUI
struct ImplicitMultiDemo: View {
@State private var on = false
var body: some View {
VStack(spacing: 16) {
Image(systemName: "star.fill")
.font(.system(size: 48))
.foregroundStyle(on ? .yellow : .gray)
.scaleEffect(on ? 1.25 : 1.0)
.opacity(on ? 1.0 : 0.6)
.animation(.easeInOut(duration: 0.6), value: on)
Button(on ? "Reset" : "Animate") {
on.toggle()
}
}
.padding()
}
}
struct ContentView: View {
var body: some View {
ImplicitMultiDemo()
}
}
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
یک state و یک .animation کافی است. چندین تغییر، هماهنگ انیمیت می شوند.
گام های عملی برای شروع
- یک state بساز و مقدار اولیه بده.
- modifierهای وابسته به state را اضافه کن.
.animation(..., value: state)را روی همان نما بگذار.- با دکمه یا ژست، state را تغییر بده.
نکته: اگر نیاز به زمان بندی دقیق داری، صفحه انیمیشن صریح را ببین.
همچنین برای دیدن تصویر کلی، صفحه انیمیشن SwiftUI را مطالعه کن. برای مقایسه، روی لینک انیمیشن ضمنی هم کلیک کن.
جمع بندی سریع
- انیمیشن ضمنی ساده و تمیز است.
- یک state همه چیز را کنترل می کند.
- چند خصوصیت را همزمان انیمیت کن.
- برای کنترل بیشتر، سراغ انیمیشن صریح برو.