如何在不设置**动画的情况下更改SwiftUI视图@状态**

如何在不设置**动画的情况下更改SwiftUI视图@状态**,swift,animation,swiftui,Swift,Animation,Swiftui,我有一个视图,可以对外部@ObservedObject的更改做出反应,因此我使用隐式动画来动画观察到的对象发生更改时发生的更改: .animation(.easeInOut(持续时间:1)) 这很有效,但我有一个问题 我还希望视图可以拖动,但在拖动视图时更改偏移状态时,它现在使用的是慢速动画。我已尝试将动画显式设置为.none或nil,但两者都不起作用 所以我的问题是,我怎么能让我的显式动画否决我的隐式动画,就像我用HighPriotityPassent或类似的方法一样。这在SwiftUI中可能

我有一个视图,可以对外部
@ObservedObject
的更改做出反应,因此我使用隐式动画来动画观察到的对象发生更改时发生的更改:

.animation(.easeInOut(持续时间:1))

这很有效,但我有一个问题

我还希望视图可以拖动,但在拖动视图时更改偏移状态时,它现在使用的是慢速动画。我已尝试将动画显式设置为.none或nil,但两者都不起作用

所以我的问题是,我怎么能让我的显式动画否决我的隐式动画,就像我用HighPriotityPassent或类似的方法一样。这在SwiftUI中可能吗

我使用的是Xcode 12和iOS 14

以下是一个例子:

import SwiftUI

struct CardView: View {

    @ObservedObject var myObject: MyObject
    @State var translation = CGSize(width: 0, height: 0)

    var body: some View {
        ZStack {
            RoundedRectangle(cornerRadius: 12)
            Text(myObject.someVal)
        }
        .animation(.easeInOut(duration: 1))
        .offset(x: translation.width, y: translation.height)
        .gesture(
            DragGesture()
                .onChanged { value in
                    withAnimation(nil) {
                        // I don't want this to be animated!
                        translation = value.translation
                    }
                }
                .onEnded { _ in
                    // I'd preferably like to also animate this with .spring() and ignore the implicit animation
                    withAnimation(.spring()) {
                        translation = .zero
                    }
                }
         )
    }
}

谢谢

将隐式动画与值连接起来,使其仅可设置动画(这样它不会对非相关偏移做出反应),如

ZStack{
圆角转角(拐角半径:12)
文本(myObject.someVal)
}
.animation(.easeInOut(持续时间:1),值:myObject.someVal)//
ZStack {
    RoundedRectangle(cornerRadius: 12)
    Text(myObject.someVal)
}
.animation(.easeInOut(duration: 1), value: myObject.someVal)  // << here !!