我仍在学习并尝试了解 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)
}
}
非常感谢,非常感谢任何帮助或提示。