▶️

[SwiftUI] AppStorageの値の変更はデフォルトだとアニメーションされない

2023/11/03に公開

SwiftUIでの開発中に、さっきまでアニメーションしていたものがアニメーションしなくなって困ったのでメモ。

原因

@SceneStorageだったものを@AppStorageに変更したからだった。

@AppStorageはデフォルトではアニメーションしてくれないらしい。UserDefaultsに書き込む/読み込むものだしその制約はわかる。

解決方法

.animation(_:value:)を使えば問題ない

struct ContentView: View {
  @AppStorage("isScaled") var isScaled: Bool = false
  var body: some View {
    VStack {
      Text("Hello, World!")
        .scale(scaled ? 2 : 1)
        .animation(.spring, value: isScaled)
      Toggle("toggle isScaled", $isScaled)
        .frame(width: 150)
    }
  }
}			

Discussion