SwiftUI TabView 动画

Posted

技术标签:

【中文标题】SwiftUI TabView 动画【英文标题】:SwiftUI TabView Animation 【发布时间】:2021-04-26 13:39:21 【问题描述】:

我目前在我的应用程序上面临一个 pb。 我想为 SwiftUI TabView 控制的项目的插入和删除设置动画。

这是重现问题的最简单视图

struct ContentView: View 
    @State private var selection: Int = 1
    var body: some View 
        TabView(selection: $selection.animation(),
                content:  
                    Text("Tab Content 1")
                        .transition(.slide) //could be anything this is for example
                        .tabItem  Text("tab1") .tag(1)
                        .onAppear() print("testApp")
                        .onDisappear()print("testDis")
                    Text("Tab Content 2")
                        .transition(.slide)
                        .tabItem  Text("tab2") .tag(2)
                )
       
    

实际上是在点击 tabItem 时。它立即从“选项卡内容 1”切换到“选项卡内容 2”,我想对其进行动画处理(不是选项卡项目按钮实际选项卡内容)。 On Appear 和 onDisapear 按预期正确调用,因此应触发所有转换。

如果有人有想法开始合作,我会很高兴

谢谢

【问题讨论】:

对不起。最近我的工作量很大,而这个特殊的问题在我的优先级中很低。我确实对其进行了快速测试,并且效果很好。 【参考方案1】:

1.with .transition() 我们只指定应该发生的转换。

2.Transition 发生(如预期),仅在显式动画发生时发生。

3.当变化发生时发生动画(State, Binding)

这是一种可能的方法。

    struct ContentView: View 
        @State private var selection: Int = 1
        var body: some View 
            TabView(selection: $selection,
                    content:  
                        ItemView(text:"1")
                            .tabItem  Text("tab1") .tag(1)
                        ItemView(text: "2")
                            .tabItem  Text("tab2") .tag(2)
                    )
            
        
    
    
    struct ContentView_Previews: PreviewProvider 
        static var previews: some View 
            ContentView()
        
    
    
    
    struct ItemView: View 
        let text: String
        @State var hidden = true
        
        var body: some View 
            VStack 
                if !hidden 
                    Text("Tab Content " + text)
                        .transition(.slide) 
                
            
            .onAppear()  withAnimation 
                hidden = false
            
            .onDisappear()hidden = true
            
        
    

【讨论】:

以上是关于SwiftUI TabView 动画的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI TabView 动画

如何保持动画在 TabView 视图变化上运行?

SwiftUI 无限 TabView 项

在 SwiftUI 中的 tabview 中嵌入 webview

SwiftUI:在 TabView 中调整图像的位置

SwiftUI TabView 不更新视图