我想在同一个项目上识别一个TapGesture
和LongPressGesture
。它工作得很好,除了以下几个例外:LongPressGesture
在我指定的持续时间(0.25秒)之后单独响应,但是当我将它与TapGesture
结合使用时,它至少需要1秒-我无法找到使其响应更快的方法。下面是一个demo:
下面是它的代码:
struct ContentView: View {
@State var message = ""
var body: some View {
Circle()
.fill(Color.yellow)
.frame(width: 150, height: 150)
.onTapGesture(count: 1) {
message = "TAP"
}
.onLongPressGesture(minimumDuration: 0.25) {
message = "LONG\nPRESS"
}
.overlay(Text(message)
.font(.title).bold()
.multilineTextAlignment(.center)
.allowsHitTesting(false))
}
}
请注意,除了LongPress的持续时间远长于0.25秒之外,它工作正常。
有什么想法吗?提前感谢!
4条答案
按热度按时间iezvtpos1#
要有一些多手势,以满足每个人的需要在项目中,苹果没有什么比正常手势提供,混合他们在一起达到愿望手势有时会变得棘手,这里是一个拯救,工作没有问题或bug!
zzlelutf2#
我发现了这个老问题,既然我不得不做类似的事情,我想我应该分享一下。最后我得到了这段代码,只要它没有附加到Button(它吸收了一些手势),它似乎工作得很好。把下面的代码加到一个图像或圆圈之类的东西上,它会立即检测到一个点击,或者在0.25秒后长按。(请注意,这将仅检测一个或另一个,而不是两者。
我想你之前问题的根源是轻击手势必须“掉穿”到长按手势,这花了一点时间。这一个同时开始,但只有一个成功。
kxxlusnw3#
LongPressGesture有另一个完成,当用户第一次触摸时,它可以执行一个动作。并且再次以最小持续时间进行。这样的东西能起作用吗?
xoshrz7s4#
这不是很漂亮,但它工作得很好。它记录每次点击/按下的开始,如果在0.25秒之前结束,它将其视为
TapGesture
,否则它将其视为LongPressGesture
:如果有人能想到一个实际使用
LongPressGesture
和TapGesture
的解决方案,我会更喜欢!