Я использую бета-версию Xcode 16 + iOS 18 по примеру Apple на LongPressGesture
с:
import SwiftUI
struct LongPressGestureView: View {
@GestureState private var isDetectingLongPress = false
@State private var completedLongPress = false
var body: some View {
Circle()
.fill(self.isDetectingLongPress ?
Color.red :
(self.completedLongPress ? Color.green : Color.blue))
.frame(width: 100, height: 100, alignment: .center)
.gesture(LongPressGesture(minimumDuration: 3)
.onChanged { value in
print("onChanged: \(value)")
}
.updating($isDetectingLongPress) {
currentState, gestureState, transaction in
print("currentState: \(currentState)")
print("gestureState: \(gestureState)")
print("transaction: \(transaction)")
gestureState = currentState
transaction.animation = Animation.easeIn(duration: 2.0)
}
.onEnded { finished in
print("finished: \(finished)")
self.completedLongPress = finished
})
}
}
Предполагается, что круг анимируется от blue
до red
, а затем поворачивается green
, когда закончит, но для меня это никогда не red
. Я вижу, как он поворачивается green
и печатает finished: true
, когда заканчивается, но я никогда не вижу других операторов печати.
Это ошибка или я упускаю что-то очевидное?
Не удалось заставить работать пример Apple, похоже, это старый код, который больше не работает.
Чтобы достичь того, чего вы хотите, вы можете попробовать этот подход:
struct ContentView: View {
var body: some View {
LongPressGestureView()
}
}
struct LongPressGestureView: View {
@State private var isDetectingLongPress = false
@State private var completedLongPress = false
var body: some View {
Circle()
.fill(isDetectingLongPress ? Color.red : (completedLongPress ? Color.green : Color.blue))
.frame(width: 100, height: 100, alignment: .center)
.onLongPressGesture(minimumDuration: 2) {
completedLongPress = true
} onPressingChanged: { inProgress in
isDetectingLongPress = inProgress
}
}
}
Хорошо, попробуйте это .onLongPressGesture(minimumDuration: 2, maximumDistance: xxx) {...}
, где вы можете выбратьxxx
максимальное расстояние, на которое может переместиться взаимодействие, прежде чем жест не удастся.
Большой. Спасибо за вашу помощь :)
Кажется, что если я хоть немного сдвину палец во время нажатия, жест не завершится. Ожидается ли это?