如何为视图插入/删除的过渡设置动画?插入动画不起作用

msm*_*lko 4 animation transition swiftui

我无法在 SwiftUI 中进行插入转换。

我有一个Group有条件地显示两个视图之一的视图。当我尝试为过渡设置动画时,删除过渡有效,但插入无效- 视图立即出现,没有任何动画。

我将其粘贴在我的视图代码下面。我怎样才能做到这一点? (Xcode 11.3.1)

struct TestView: View {

    @State private var showView = false

    var body: some View {
        VStack {
            Button(action: {
                withAnimation {
                    self.showView.toggle()
                }

            }) {
                Text("Tap")
            }

            Group {
                if showView {
                    Color.red
                        .frame(width: 100, height: 100)
                } else {
                    Color.blue
                        .frame(width: 100, height: 100)
                        .cornerRadius(50)
                }
            }
            .transition(.asymmetric(insertion: .move(edge: .leading),
                                    removal: .move(edge: .trailing)))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

正如 @Asperi 在评论中指出的那样,代码是正确的,但是......它仅在真实设备上运行时才有效。Xcode 中的实时预览存在缺陷,并且显然不能很好地处理转换。

所以这个问题的答案很简单:在真机上测试!:)

Asp*_*eri 5

好吧,好吧,这只是从 SwiftUI 预览历史记录到现在为止的观察(无法说出下一版本中会发生什么),但是 -过渡在预览中根本无法正常工作(静态或实时- 看起来像是限制) ,所以不要在那里测试它们。

在独立模拟器上测试转换,或者最好在真实设备上测试转换。