延迟 SwiftUI 中的转换

Posted

技术标签:

【中文标题】延迟 SwiftUI 中的转换【英文标题】:Delay a transition in SwiftUI 【发布时间】:2020-02-17 22:07:59 【问题描述】:

如何延迟过渡?我想点击一个按钮,然后视图应该延迟转换。

我有以下代码,但没有正确同步。

struct ContentView: View 
    @State var showOne = true


    var body:some View
        VStack
            if showOne
                HStack
                    Spacer()
                    Text("One")
                    Spacer()
                
                .animation(Animation.default.delay(2))
                .background(Color.red)
                .transition(.slide)
            else
                HStack
                    Spacer()
                    Text("Two")
                    Spacer()
                
                .background(Color.blue)
                .animation(Animation.default.delay(1))
                .transition(.slide)
            
            Button("Toggle")
                withAnimation()
                    self.showOne.toggle()
                
            
        
    

【问题讨论】:

您确定,您要延迟(推迟)吗?请在按下切换按钮后指定应执行的操作和顺序。 【参考方案1】:

如果您添加明确的id,它会按您的意愿工作。请注意,我只制作了一个动画延迟,以便更明显地表明这是有效的。

struct ContentView: View 
    @State var showOne = true
    var body:some View 
        VStack 
            if showOne 
                HStack 
                    Spacer()
                    Text("One")
                    Spacer()
                
                .background(Color.red)
                .id("one")
                .animation(Animation.default)
                .transition(.slide)
             else 
                HStack 
                    Spacer()
                    Text("Two")
                    Spacer()
                
                .background(Color.blue)
                .id("two")
                .animation(Animation.default.delay(2))
                .transition(.slide)
            
            Button("Toggle") 
                withAnimation 
                    self.showOne.toggle()
                
            
        
    


我发现一个明确的id 在我想使用过渡的大部分时间都有帮助。在您的示例中,不使用 id 可能会导致文本在背景之前更改。这似乎是一个错误,我建议对此提交反馈。

【讨论】:

好吧,我花了很长时间才发现我的解决方案出了问题。当您用两个不同的视图替换 HStack 时,动画再次被破坏。你知道如何解决吗?我在这里为此创建了一个新问题:***.com/questions/60464094/broken-animation-swiftui

以上是关于延迟 SwiftUI 中的转换的主要内容,如果未能解决你的问题,请参考以下文章

iOS 14.2 中的 SwiftUI PageTabView 性能问题滞后

延迟 SwiftUI 中的重复动画,在完整的自动反转重复周期之间

SwiftUI ForEach 没有动画延迟

如何在 SwiftUI 中延迟 @State 变量的设置值

SwiftUI 反向动画延迟移除

SwiftUI 动画:如何延迟重复动画