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!")
更新:第二种解决方案
由于上述方法报告在某些情况下不起作用,您可以尝试改用gesture
s 修饰符:
.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中按钮不响应点击动作等若干不兼容问题的解决