我想使用长按手势并检测用户何时连续按住 1 秒,并且我还想检测用户何时放开屏幕。目前,onChanged 检测手势何时开始,onEnded 在 1 秒后触发。所以我可以使用 onEnded 来检测用户何时连续按住 1 秒。但我怎么知道用户什么时候放手呢?
Color.blue
.simultaneousGesture(LongPressGesture(minimumDuration: 1.0)
.onChanged { _ in
UIImpactFeedbackGenerator(style: .light).impactOccurred()
}
.onEnded { _ in
UIImpactFeedbackGenerator(style: .light).impactOccurred()
}
)
正如您所发现的,
LongPressGesture
当触发它所需的时间间隔过去时结束,而不是当用户抬起手指时结束。因此,它不适合检测手指抬起。我会用 a
DragGesture
代替。onChanged
当手势开始时调用它,onEnded
当手指抬起时调用它。我们可以在 中记录开始时间onChanged
,在 中记录结束时间onEnded
,从而记录用户按下的时间。请注意,我已将其更改为用于
sensoryFeedback
创建触觉反馈。如果您的目标是 iOS 17 之前的版本,使用UIImpactFeedbackGenerator
也可以。请注意,与 a 不同的是
LongPressGesture
,当用户按下后过多移动手指时不会触发,但DragGesture
如果手指移动,仍会被识别。如果不希望出现这种情况,请使用该value.translation
属性来确定手指是否移动过多。