分享!SwiftUI 中处理双击事件

225 阅读1分钟

今天在代码开发中,遇到一个问题,就是当用户在双击屏幕某个区域时,要执行一个动作。

这就要检测双击事件,网上搜了一下,检测双击事件的代码是:

VStack {
  Text("如果你双击我,会发生什么")
}
  .onTapGesture(count: 2, perform: {})

这样就可以给 VStack 注册双击事件,但是在产品运行的时候,发现双击事件没有触发。

这时候,想知道是不是因为VStack的区域不够,才导致没有触发的问题,于是加了一行调试代码:

VStack {
  Text("如果你双击我,会发生什么")
}
  .background(.red)
  .onTapGesture(count: 2, perform: {})

这时候再运行代码,发现双击事件可以触发了。

然后,我以为问题解决了。于是去掉了调试代码(也就是background),这时候再跑代码,发现双击事件又不能触发了!

奇怪啊!

经过再次调试,我突然明白:也许双击事件的触发,需要一个 background,于是,我把代码改成:

VStack {
  Text("如果你双击我,会发生什么")
}
  .background()
  .onTapGesture(count: 2, perform: {})

也就是,增加一个透明的 background。

这时候,双击事件顺利触发了。

解决!

当然,这背后的原理,我还不是特别明白,有SwiftUI高手的话,请在评论区留言指教。