如何在不设置**动画的情况下更改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 !!