0

我仍在学习并尝试了解 swiftUI 的来龙去脉。目前,我专注于理解手势和动画,这里有一个在我的经验水平上似乎无法解决的问题:

问题: 如果取消 longPressGesture,我会遇到意外行为,例如。在超过 longPress 的 minimumDuration 之前抬起手指。

取消进度条动画问题

预期结果: 在上面的示例中,您看到我长按 2 次,然后取消长按一次。如果取消 longPress,我希望红色进度条再次缩小并保持其位置居中。但是正如你所看到的,进度条改变了它的位置。

是什么导致了这个问题以及如何在仍然使用 swiftUI 和 GestureState 的同时解决它

这是代码:


struct DiamondPress: View {
    
    @GestureState var isDetectingLongPress = false
    @State var completedLongPress = false
    
    var longPress: some Gesture {
        LongPressGesture(minimumDuration: 2)
        .updating($isDetectingLongPress) { currentState, gestureState, transaction in
            gestureState = currentState
            transaction.animation = Animation.linear(duration: 2.0)
        }
        .onEnded { _ in
            self.completedLongPress.toggle()
        }
    }

    var body: some View {
        
        ZStack {           
            Color.offWhite
            
            RoundedRectangle(cornerRadius: 12, style: .continuous)
            .frame(width: 100, height: 100, alignment: .center)
            .foregroundColor(.white)
            .scaleEffect(completedLongPress ? 2.0 : 1.0)
            .gesture(longPress)
            .animation(.easeIn(duration: 0.2))
                
            // here is the red progress bar:
            Rectangle()
            .frame(
               width: !isDetectingLongPress ? CGFloat(5) : CGFloat(100),
               height: 5, alignment: .center
            )
            .foregroundColor(.red)
        }
        .edgesIgnoringSafeArea(.all)
    }
}

非常感谢,非常感谢任何帮助或提示。

4

0 回答 0