Проблема с анимацией при отмене длительного нажатия - SwiftUI, iOS 14.5
Я все еще изучаю и пытаюсь понять все тонкости swiftUI. В настоящее время я сосредотачиваюсь на понимании жестов и анимации, и вот проблема, которая кажется неразрешимой на моем уровне опыта:
Проблема: я испытываю неожиданное поведение, если longPressGesture отменяется, например. поднятие пальца до того, как будет превышена минимальная длительность длительного нажатия.
Ожидаемый результат: в приведенном выше примере вы видите, как я долгое нажатие 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)
}
}
Большое спасибо, любая помощь или подсказка приветствуются.