SwiftUI - 用不同的动作响应点击和双击

Posted

技术标签:

【中文标题】SwiftUI - 用不同的动作响应点击和双击【英文标题】:SwiftUI - Respond to tap AND double tap with different actions 【发布时间】:2019-10-24 10:09:10 【问题描述】:

我需要用不同的动作来响应单击和双击,但是在 SwiftUI 中,双击手势被解释为两次单击。

在 swift 中你可以使用失败手势,但不知道如何在 SwiftUI 中使用。

例子:

.onTapGesture(count: 1) 
     print("Single Tap!")

.onTapGesture(count: 2) 
     print("Double Tap!")

TIA。

【问题讨论】:

【参考方案1】:

第一个阻止第二个执行。所以颠倒你的代码顺序:

.onTapGesture(count: 2) 
    print("Double Tap!")

.onTapGesture(count: 1) 
    print("Single Tap!")

更新:第二种解决方案

由于上述方法报告在某些情况下不起作用,您可以尝试改用gestures 修饰符:

.gesture(TapGesture(count: 2).onEnded 
    print("double clicked")
)
.simultaneousGesture(TapGesture().onEnded 
    print("single clicked")
)

【讨论】:

这在 macOS 上无法正常工作。它可以工作,但是单击回调会延迟 200 毫秒左右。 如果你在双击的同时连按三次也不起作用 如前所述,这种方法会导致等待第二次点击的延迟。手势必须是同时的。请参阅 Asperi 的回答:***.com/questions/59992089/…【参考方案2】:

您也可以像这样设置 TapGesture 的计数:

.simultaneousGesture(TapGesture(count: 2).onEnded 
    // double tap logic
)

根据 Apple 开发者文档: https://developer.apple.com/documentation/swiftui/tapgesture

【讨论】:

【参考方案3】:
Text("Tap Me!").gesture(      
TapGesture(count: 2)
    .onEnded( print("Tapped Twice!”))
    .exclusively(before:
        TapGesture()
        .onEnded(print("Tapped Once!”) )          
)              

)

【讨论】:

以上是关于SwiftUI - 用不同的动作响应点击和双击的主要内容,如果未能解决你的问题,请参考以下文章

iOS 15.3.1中SwiftUI toolbar中按钮不响应点击动作等若干不兼容问题的解决

UIGesture 识别器,区分单击和双击。

Android:单击返回和双击退出应用的监听实现

Android:单击返回和双击退出应用的监听实现

SwiftUI 如何使 CoreData 列表在 macOS 上可选择和可双击

SwiftUI 中具有双重动作(点击和长按)的按钮