私は、swiftUI ビューの遷移を理解し、実験しようとしており、次のことが期待どおりに機能しない理由についての洞察を使用できます。
struct ContentView: View {
@State private var showOverlay: Bool = false
var body: some View {
ZStack {
VStack {
Button(action: {
withAnimation(.easeInOut) {
self.showOverlay = true
}
}) {
Text("Hello, World!")
}
}
.zIndex(0)
.animation(nil)
.blur(radius: showOverlay ? 3 : 0)
if showOverlay {
HStack {
Button(action: {
withAnimation(.easeInOut) {
self.showOverlay = false
}
}) {
Text("Close")
}
.frame(width: 80, height: 80)
.background(Color.red)
.transition(.move(edge: .top))
Button(action: {
withAnimation(.easeInOut) {
self.showOverlay = false
}
}) {
Text("Close")
}
.frame(width: 80, height: 80)
.background(Color.red)
.transition(.move(edge: .bottom))
}
.zIndex(1.0)
}
}
}
2 つのボタンの条件付き HStack があります。@State パラメータshowOverlay
が変更されると、それはwithAnimation
ブロック内で行われます。個々のボタンの遷移は受け入れられません。
HStack を削除し、各ボタンに zIndex(1) を配置すると、削除遷移は発生しますが、挿入遷移は発生しません。
グループがビューに追加されたときに、両方のボタンが指定された方法で遷移するようにします。
質問: HStack でラップすると内部遷移が無視されるのはなぜですか? エッジ トランジションが 1 方向にしか機能しないのはなぜですか?