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

Posted

技术标签:

【中文标题】如何动画视图插入/删除的过渡?插入动画不起作用【英文标题】:How can I animate transition of a view insertion/removal? Insertion animation doesn't work 【发布时间】:2020-02-27 12:52:53 【问题描述】:

我无法在 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)))
        
    


编辑:

正如@Asperi 在评论中指出的那样,代码是正确的,但是......它只有在真实设备上运行时才能工作。 Xcode 中的实时预览有问题,而且显然不能很好地处理过渡。

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

【问题讨论】:

看起来工作正常。你能附上屏幕录像来比较吗? 这里也一样。您能否展示/解释一下到底出了什么问题? @Asperi 尝试将withAnimation 更新为withAnimation(.easeInOut(duration: 2)),您将在预览中看到问题 @AlekseyPotapov,转场在预览中不能正常工作(看起来像限制),所以不要在那里测试它们。 天哪,这些信息有很大帮助。谢谢!将此添加为关闭问题的答案。 【参考方案1】:

好吧,好吧,这只是从 SwiftUI 预览历史的观察,直到现在(不能说下一个版本会是什么),但是 - 过渡在预览中根本无法正常工作(静态或直播 - 看起来有限制,所以不要在那里测试。

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

【讨论】:

以上是关于如何动画视图插入/删除的过渡?插入动画不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android过渡动画不起作用

带有剪切路径的动画:插入在Safari中不起作用

添加视图时,SwiftUI 插入转换不起作用

角度 6 动画 *ngIf,过渡不起作用

SwiftUI - 过渡动画在 GeoReader 中不起作用?

Angular 6 路由器过渡动画不起作用(导航栏)