macOS上的SwiftUI-同时处理单击和双击 [英] SwiftUI on macOS - handle single-click and double-click at the same time

查看:81
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆