SwiftUI - 如何检测按钮上的长按?
Posted
技术标签:
【中文标题】SwiftUI - 如何检测按钮上的长按?【英文标题】:SwiftUI - how to detect long press on Button? 【发布时间】:2020-02-29 11:01:47 【问题描述】:我有一个按钮,当它被按下时,它会执行一些操作。但我想修改同一个 Button 以检测更长的按下,并执行一组不同的过程。如何修改此代码以检测长按?
Button(action:
// some processes
)
Image(systemName: "circle")
.font(.headline)
.opacity(0.4)
【问题讨论】:
【参考方案1】:这是可能的变体(使用 Xcode 11.2 / iSO 13.2 测试)。
Button("Demo")
print("> tap")
.simultaneousGesture(LongPressGesture().onEnded _ in
print(">> long press")
)
【讨论】:
这是我见过的最好的解决方案。但是,请注意,按钮按下操作仍会在释放按钮时触发。在我的用例中,这无关紧要。 我喜欢这个解决方案,但是它仍然会触发按钮点击。有没有办法专门检测按钮的点击或长按?在这种情况下,它应该能够识别点击前的长按。【参考方案2】:丹尼尔伍德的评论在这两个陈述中都是正确的。首先,它是最干净的解决方案。对于第二个,有一个简单的解决方法。
struct ContentView: View
@State private var didLongPress = false
var body: some View
Button("Demo")
if self.didLongPress
self.didLongPress = false
doLongPressThing()
else
doTapThing()
.simultaneousGesture(
LongPressGesture().onEnded _ in self.didLongPress = true
)
【讨论】:
以上是关于SwiftUI - 如何检测按钮上的长按?的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI手势(Gesture)进阶 : 实现任意视图的长按惯性加速行为
SwiftUI手势(Gesture)进阶 : 实现任意视图的长按惯性加速行为
SwiftUI手势(Gesture)进阶 : 实现任意视图的长按惯性加速行为