我有一个拖动手势,其中包含一个布尔值
@GestureState
,当用户拖动时,它会在视图中进行一些更改的动画。我使用@GestureState
确保如果拖动被中断或停止,布尔值将重置为false。不幸的是,在@GestureState
重置时,布尔值会无动画地重置。如果我使用@State
并在onEnded和onChanged中手动更改布尔值,我可以使用withAnimation
使动画工作,但由于我需要确保当用户不拖动时布尔值为false,所以我更愿意使用@GestureState
。或者在这种情况下使用@State
是否安全?(如果是这样,为什么有人会使用@GestureState?)此问题似乎存在类似的问题,但没有令人满意的答案。
我的代码:
struct SomeView: View {
@GestureState var isNavigating: Bool = false
var body: some View {
let dragGesture = DragGesture(minimumDistance: 0)
.updating($isNavigating, body: { dragValue, state, transaction in
transaction.animation = .default
state = true
})
.onChanged { _ in
withAnimation {
//isNavigating = true this works when isNavigating is @State
}
}
.onEnded { _ in
withAnimation {
// isNavigating = false this works when isNavigating is @State
}
}
VStack {
Text("Hello World")
if isNavigating {
Text("Dragging")
}
}
.gesture(dragGesture)
}
}