如何阻止视图在 SwiftUI 中出现动画?

Posted

技术标签:

【中文标题】如何阻止视图在 SwiftUI 中出现动画?【英文标题】:How to stop a view from animating on appear in SwiftUI? 【发布时间】:2020-07-13 09:03:44 【问题描述】:

我正在为 SwiftUI 中的视图设置动画,即使我在 .onAppear() 方法中没有它,它也会在视图出现时立即进行动画处理。我希望它只有在我按下文本时才会产生动画,这就是我使用点击手势的原因。这是我的代码:

struct ContentView: View 
     var body: some View 
          Text()
             .scaleEffect(cardTap ? 0.9 : 1)
                .gesture(LongPressGesture().onChanged  value in
                    self.cardTap = true
                    DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) 
                        self.cardTap = false
                        UIImpactFeedbackGenerator(style: .soft).impactOccurred()
                    
                    
            ).animation(.spring(response: 0.5, dampingFraction: 0.5, blendDuration: 0))
     

【问题讨论】:

我无法复制。您最初是否将 cardTap 设置为 true? 【参考方案1】:

您可以将动画限制为仅由特定值触发,如下例所示

Text()
 .scaleEffect(cardTap ? 0.9 : 1)
    .gesture(LongPressGesture().onChanged  value in
        self.cardTap = true
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) 
            self.cardTap = false
            UIImpactFeedbackGenerator(style: .soft).impactOccurred()
        
        
)
.animation(.spring(response: 0.5, 
    dampingFraction: 0.5, blendDuration: 0), value: cardTap)  // << here !!

【讨论】:

以上是关于如何阻止视图在 SwiftUI 中出现动画?的主要内容,如果未能解决你的问题,请参考以下文章

当视图出现在 SwiftUI 中时禁用动画

在 SwiftUI 中将视图添加到层​​次结构时如何动画过渡

SwiftUI:输入字段键盘动画导致选项卡视图中的其他视图动画

SwiftUI onAppear:动画持续时间被忽略

如何在 SwiftUI 中制作简单的上下浮动动画?

SwiftUI 动画如何与子视图隔离?