NavigationView中的SwiftUI自定义动画过渡?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NavigationView中的SwiftUI自定义动画过渡?相关的知识,希望对你有一定的参考价值。

SwiftUI中有没有一种方法可以更改NavigationView / NavigationLink的标准行为,即从一个视图滑动到另一个视图?我想要一个自定义动画/过渡,例如淡入/淡出。

我正在尝试一阵子,解决了一半,但在下半场苦苦挣扎。此代码:

struct ContentView: View 
    @State var appeared: Double = 0.0

    var body: some View 
        NavigationView 
            VStack 
                Text("\(appeared)")
                NavigationLink(destination: ViewB()) Text("go to View B")
            
            .opacity(appeared)
            .animation(Animation.easeInOut(duration: 3.0), value: appeared)
            .onAppear self.appeared = 1.0
            .onDisappear self.appeared = 0.0
        
    

显示视图时工作正确。通过在3秒钟内将不透明度更改为1.0来淡入。都好。但是,当单击NavigationLink进入视图B时,它将滑移该视图,并且视图B(具有相同的逻辑)会慢慢淡入。我猜这是因为onDisappear实际上是在视图消失时触发的,而不是在视图即将移开时触发的。

是否有机会告诉SwiftUI不要滑动或滑动,而是执行自定义动画/过渡?

我正在使用Xcode 11.2.1

答案

这有点晚了,但我刚遇到这个问题,也许我的解决方案会帮助其他有此问题的人。

我需要更改不透明度,但是我无法使用NavLink进行更改,所以我做了类似的事情:

struct example: View 
    @State var firstView = true
    @State var appeared: Double = 0
    var body: some View 
        VStack
            if firstView
                VStack
                    Button(action: 
                        self.firstView = false
                    )
                        Text("change view")
                    
                
            
            else
                VStack
                    Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
                
                .opacity(appeared)
                .animation(Animation.easeInOut(duration: 3.0), value: appeared)
                .onAppear self.appeared = 1.0
                .onDisappear self.appeared = 0.0
            
        

    

其想法是,当按下按钮时(或每当执行所需的任何计算时,您都可以使用if-else 结构来模拟过渡。

希望有帮助!

以上是关于NavigationView中的SwiftUI自定义动画过渡?的主要内容,如果未能解决你的问题,请参考以下文章

NavigationView 样式中的 SwiftUI SidebarListStyle

SwiftUI - NavigationView 中的内存泄漏

如何使用 SwiftUI 消除嵌套 NavigationView 中的空间

如何从 SwiftUI 中的 NavigationView 中删除搜索栏?

NavigationView中的SwiftUI自定义动画过渡?

使用 NavigationView 和 List 时如何更改 SwiftUI 中的背景颜色?