今天在代码开发中,遇到一个问题,就是当用户在双击屏幕某个区域时,要执行一个动作。
这就要检测双击事件,网上搜了一下,检测双击事件的代码是:
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高手的话,请在评论区留言指教。