我想识别下面的单击和双击Capsule
。这段代码工作正常:
Capsule()
.frame(width: 100, height: 42)
.onTapGesture(count: 1) {
print("Single Tap recognized instantly")
}
Run Code Online (Sandbox Code Playgroud)
但是当我添加.onTapGesture(count: 2)
到它时,单击会在 0.25 毫秒后调用。
Capsule()
.frame(width: 100, height: 42)
.onTapGesture(count: 2) {
print("Double tap recognized instantly")
}
.onTapGesture(count: 1) {
print("Single Tap recognized after 0.25ms")
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
只是为了澄清一件事:当您的目标是专门检测两者时,您不能将单次轻击手势与双击手势一起识别(即系统应该无延迟地区分单击和双击) )因为理论上单次点击总是会导致双击。这意味着您始终必须等待一段时间(在您的情况下为 0.25 毫秒)以排除用户想要双击的情况。
但是,当您的目标是将单次点击手势与双击手势结合在一起(即同时)时,现在这是完全可行的。
手势就像 SwiftUI 中的许多东西一样,protocol
并且可以通过多种方式构建自定义手势,例如body
视图。在您的情况下,我们需要双击手势与单击手势同时运行。最简单的方法是,声明一个具有不透明返回类型 ( some Gesture
) 的计算属性,并在该属性中描述您的手势:
var tapGesture: some Gesture {
TapGesture(count: 2)
.onEnded {
print("Double tap")
}
.simultaneously(with: TapGesture(count: 1)
.onEnded {
print("Single Tap")
})
}
Run Code Online (Sandbox Code Playgroud)
您可以简单地将此手势添加到您想要的任何视图中,就像您对任何其他手势执行相同的操作一样:
Capsule()
.gesture(tapGesture)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1556 次 |
最近记录: |