重置时在@GestureState上实现动画效果

4
我有一个拖动手势,其中包含一个布尔值@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)
    }
}

1个回答

2

根据手势状态添加动画效果,例如:

    VStack {
        Text("Hello World")
        if isNavigating {
            Text("Dragging")
        }
    }
    .animation(.default, value: isNavigating)   // << here !!
    .gesture(dragGesture)

已在 Xcode 13.4 / iOS 15.5 上进行测试


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接