はじめに
iOS17からグラデーションがアニメーションするようになってました。
サンプルアプリ
GIFだとわかりにくいですが、iOS16以前ではwithAnimation
ありでも一瞬で切り替わってしまいます。
~iOS16 | iOS17~ |
---|---|
実装
import SwiftUI
struct ContentView: View {
@State private var gradient = LinearGradient(
colors: [.black],
startPoint: .top,
endPoint: .bottom
)
var body: some View {
VStack {
Button {
withAnimation {
gradient = LinearGradient(
colors: [Color(red: .random(in: 0...1), green: .random(in: 0...1), blue: .random(in: 0...1)), Color(red: .random(in: 0...1), green: .random(in: 0...1), blue: .random(in: 0...1))],
startPoint: .top,
endPoint: .bottom
)
}
} label: {
Text("変更")
}
}
.ignoresSafeArea()
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Rectangle().foregroundStyle(gradient))
}
}
おわり
めっちゃ小さい改善ですが、嬉しいですね
時間と共に徐々に背景グラデーションが変化していくとかもできそうです。