これよく見かけるのでやってみます。
.contentTransition(.symbolEffect(.replace))
まず、Button の Label のアイコンを、
ある値を見ながら切り替えます。
よくあるパターンなので想像はつくでしょう。
@State private var value = false
Button {
value.toggle()
} label: {
Label("Favorite", systemImage: value ? "heart.fill" : "heart")
}
次に .symbolVariant()
を使います。
挙動は同じだと思われます。
Button {
value.toggle()
} label: {
Label("Favorite", systemImage: "heart")
.symbolVariant(value ? .fill : .none)
}
ここで、
.contentTransition(.symbolEffect(.replace))
を
付けます。
Button {
value.toggle()
} label: {
Label("Favorite", systemImage: "heart")
.symbolVariant(value ? .fill : .none)
.contentTransition(.symbolEffect(.replace))
}
Apple 公式サンプルコードでは、
以下のようにさらに細かく調整されていました。
Button {
value.toggle()
} label: {
Label("Favorite", systemImage: "heart")
.symbolVariant(value ? .fill : .none)
.contentTransition(
.symbolEffect(value ? .replace.upUp : .replace.downUp)
)
}
以上4つを並べて確認します。
微妙にエフェクト具合が違うけど、
どれがいいとはいいづらい。
👉 【SwiftUI】市松模様を背景にする - Checkered Pattern Background 🏁
🧑🏻💻 まとめ
タイトルどおりの
.contentTransition(.symbolEffect(.replace))
ぐらいがシンプルな記述のわりに見栄えが良いように思います。
みんなが良く使ってる意味が分かりました !