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

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

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

例子:

.onTapGesture(count: 1) {
     print("Single Tap!")
}
.onTapGesture(count: 2) {
     print("Double Tap!")
}

TIA。

【问题讨论】:

    标签: swiftui


    【解决方案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 的回答:stackoverflow.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!”) })          
      )              
      

      )

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-09
        • 1970-01-01
        • 2015-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多