macOS上的SwiftUI-同时处理单击和双击 [英] SwiftUI on macOS - handle single-click and double-click at the same time
本文介绍了macOS上的SwiftUI-同时处理单击和双击的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在SwiftUI中考虑此视图:
Consider this view in SwiftUI:
struct MyView: View {
var body: some View {
Rectangle()
.fill(Color.blue)
.frame(width: 200, height: 200)
.onTapGesture {
print("single clicked")
}
}
}
现在,我们正在处理单击.假设您也想处理双击,但有一个单独的回调.
Now we're handling single-click. Say you wanna handle double-click too, but with a separate callback.
您有2个选择:
- 单击后添加双击处理程序-这根本不起作用
- 在单击处理程序之前添加双击处理程序,这种方法有效:
struct MyView: View {
var body: some View {
Rectangle()
.fill(Color.blue)
.frame(width: 200, height: 200)
.onTapGesture(count: 2) {
print("double clicked")
}
.onTapGesture {
print("single clicked")
}
}
}
正确调用了双击处理程序,但在大约250毫秒的延迟后调用了单击处理程序.
Double-click handler is called properly, but single-click handler is called after a delay of about 250ms.
任何想法如何解决这个问题?
Any ideas how to resolve this?
推荐答案
这里是可行的方法(已通过Xcode 11.2/macOS 10.15测试)
Here is possible approach (tested with Xcode 11.2 / macOS 10.15)
struct MyView: View {
var body: some View {
Rectangle()
.fill(Color.blue)
.frame(width: 200, height: 200)
.gesture(TapGesture(count: 2).onEnded {
print("double clicked")
})
.simultaneousGesture(TapGesture().onEnded {
print("single clicked")
})
}
}
这篇关于macOS上的SwiftUI-同时处理单击和双击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文