Animation SwiftUI:NavigationView中已损坏的显式动画?

Animation SwiftUI:NavigationView中已损坏的显式动画?,animation,swiftui,Animation,Swiftui,当我在NavigationView中放置一个显式动画时,作为一个不受欢迎的副作用,它会为NavigationView内容的初始布局设置动画。无限动画的效果尤其糟糕。有没有办法消除这种副作用 示例:下面的图像应该是全屏蓝色背景上的动画红色加载程序。相反,我得到了一个无限循环的蓝色背景: 这是固定的部分。使用Xcode 12/iOS 14进行测试 更新:同样的内容将在动画中使用 .onAppear() { DispatchQueue.main.async { withAn

当我在NavigationView中放置一个显式动画时,作为一个不受欢迎的副作用,它会为NavigationView内容的初始布局设置动画。无限动画的效果尤其糟糕。有没有办法消除这种副作用

示例:下面的图像应该是全屏蓝色背景上的动画红色加载程序。相反,我得到了一个无限循环的蓝色背景:


这是固定的部分。使用Xcode 12/iOS 14进行测试

更新:同样的内容将在动画中使用

.onAppear() {
    DispatchQueue.main.async {
        withAnimation(Animation.linear(duration: 1).repeatForever(autoreverses: false)) {
           degrees = 360
        }
    }

}

非常感谢。您将其更改为隐式动画。我想保持显式动画。它是显式的,因为链接到value。糟糕的是,我错过了.animation()方法中的最后一个“value”参数。两种解决方案都有效,谢谢!顺便说一句,你知道为什么在我的原始代码中显式动画启动NavigationView动画吗?从概念上讲,它不应该。这是一个错误吗?你知道为什么在
DispatchQueue.main.async{}
中用动画包装
可以解决这个问题吗?我也有同样的问题,在DispatchQueue.main.async中包装对我有帮助。但我真的很想知道为什么以及它是如何工作的:)
struct EscapingAnimationTest_Inner: View {
    @State var degrees: CGFloat = 0
    
    var body: some View {
        Circle()
            .trim(from: 0.0, to: 0.3)
            .stroke(Color.red, lineWidth: 5)
            .rotationEffect(Angle(degrees: Double(degrees)))
            .animation(Animation.linear(duration: 1).repeatForever(autoreverses: false), value: degrees)
            .onAppear() {
                    DispatchQueue.main.async {
                    degrees = 360
                    }
            }
    }
}
.onAppear() {
    DispatchQueue.main.async {
        withAnimation(Animation.linear(duration: 1).repeatForever(autoreverses: false)) {
           degrees = 360
        }
    }

}