如何实现视图插入/删除动画过渡?插入动画无法工作。

3

我无法使 SwiftUI 中的插入转换(insertion transition)起作用。

我有一个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)))
        }
    }
}

编辑:

正如评论中@Asperi所指出的那样,代码是正确的,但是……它只能在真实设备上运行。Xcode中的实时预览存在漏洞,并且似乎无法很好地处理转换。

因此,这个问题的答案很简单:在真实设备上测试!:)


1
看起来运行正常。你能附上屏幕录像进行比较吗? - Asperi
同样的问题。你能展示/解释一下,到底出了什么问题吗? - Aleksey Potapov
@Asperi 尝试将 withAnimation 更新为 withAnimation(.easeInOut(duration: 2)),然后你会在预览中看到问题。 - Aleksey Potapov
1
@AlekseyPotapov,预览中转换效果不正常(看起来像是限制),所以不要在那里测试它们。 - Asperi
我认为人们会越来越重视这个。我建议@Asperi发布答案。 - Aleksey Potapov
显示剩余2条评论
1个回答

5

好的,只是从SwiftUI预览历史记录中观察到了这一点,直到现在为止(不能说下一个版本会有什么变化),但是 - 转换在预览中根本无法正常工作(静态或实时)- 看起来像是限制,所以不要在那里测试它们。

请在独立模拟器上或更好的是真实设备上测试转换效果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接