Swiftui 中的 Duration 参数 withAnimation(.linear)

Posted

技术标签:

【中文标题】Swiftui 中的 Duration 参数 withAnimation(.linear)【英文标题】:Duration parameter on Swift UI withAnimation(.linear) 【发布时间】:2021-10-07 21:02:24 【问题描述】:

我在搞乱 Swift UI 的线性动画技术并注意到,与我的预期相反,增加持续时间似乎并没有让动画发生得更慢。这是故意的吗?如果是这样,我该如何制作更慢的动画?

示例代码:

struct ButtonView: View 
    @State var show: Bool = false
    var body: some View 
        ZStack
            if show 
                withAnimation(.linear(duration: 50)) 
                    CollapsibleView()
                
            
        
        Button(action:  show = !show ) 
            Text("Press Me")
        
    



struct CollapsibleView: View 
    var body: some View 
        VStack 
            Text("Text 1")
            Text("Text 2")
            Text("Text 3")
        
    


@main
struct app: App 
    var body: some Scene 
        WindowGroup 
            ButtonView()
        
    

尝试更改持续时间参数,看看您是否能注意到较慢的动画。我达到了 5000(我假设这是以秒为单位?)它仍然以看似相同的速度制作动画。

【问题讨论】:

【参考方案1】:

您已将withAnimation 放置在视图层次结构中。你真正想要的地方是Button 的操作:

struct ButtonView: View 
    @State var show: Bool = false
    var body: some View 
        ZStack
            if show 
                CollapsibleView()
            
        
        Button(action: 
            withAnimation(.linear(duration: 10)) 
                show.toggle()
            
            
        ) 
            Text("Press Me")
        
    

或者,您可以在ZStack 上使用.animation

struct ButtonView: View 
    @State var show: Bool = false
    var body: some View 
        ZStack
            if show 
                CollapsibleView()
            
        
        .animation(.linear(duration: 10), value: show)
        Button(action: 
            show.toggle()
        ) 
            Text("Press Me")
        
    

【讨论】:

以上是关于Swiftui 中的 Duration 参数 withAnimation(.linear)的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:随机“调用中的额外参数”错误

SwiftUI 中的 NavigationLink 不接受参数

参数 SwiftUI 中的可选绑定

影响其他视图的 SwiftUI 动画

在 SwiftUI 图像上重复动画

SwiftUI:动画过渡