3

私は、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 方向にしか機能しないのはなぜですか?

4

2 に答える 2