SwiftUI DragGesture 与位置和开始位置不一致

问题描述

我正在构建一个 SwiftUI macOS 应用。

我有一个带有拖动手势的基本矩形形状。

onEnded 处理程序中,我想确定用户是否有效地点击了对象。我通过检查翻译的宽度和高度都为零来做到这一点。

(我不使用点击手势是有原因的)。

Rectangle()
    .size(.init(width:50,height: 50))
    .fill(Color.blue.opacity(0.01))
    .gesture(DragGesture(minimumDistance:0)
                .onChanged { gesture in
                    // Ommited
                }
                .onEnded { gesture in
                    print("startLocation",gesture.startLocation)
                    print("start",gesture.location)
                    print("translation",gesture.translation)
                    
                    if gesture.translation == .zero {
                        print("tap")
                    }

                    print()
                }
    )

我遇到了一些问题,其中报告的翻译值带有意外值。

报告的值因我在矩形中单击的位置而异。

这是一组单独的点击。 translation 派生自 startLocationlocation 字段。

您可以看到 startLocationlocation 字段之间的差异。如果它是一个非常小的变化,我可以去抖动,但是有时我会得到 3 的值这一事实让我想知道为什么会发生这种变化(我在执行点击时小心翼翼而不移动).

有谁知道为什么会出现这种变化?

startLocation (263.5149841308594,144.3092803955078)
start (263.51495361328125,144.30926513671875)
translation (-3.0517578125e-05,-1.52587890625e-05)

startLocation (276.2882995605469,144.43479919433594)
start (276.288330078125,144.434814453125)
translation (3.0517578125e-05,1.52587890625e-05)

startLocation (274.3827209472656,162.3402557373047)
start (274.38275146484375,162.34027099609375)
translation (3.0517578125e-05,1.52587890625e-05)

startLocation (264.81805419921875,167.47662353515625)
start (264.81805419921875,167.47662353515625)
translation (0.0,0.0)
tap

startLocation (254.5931396484375,135.4690399169922)
start (254.5931396484375,135.46905517578125)
translation (0.0,1.52587890625e-05)

startLocation (259.1647033691406,140.26919555664062)
start (259.16473388671875,140.26919555664062)
translation (3.0517578125e-05,0.0)

编辑

正如下面所指出的,3 的值实际上是 3e-05 = 0.00003,我在撰写本文时错过了它。但是,仍在寻找有关为什么点击手势在矩形的某些点重复单击时会具有零平移,而在其他点具有非零平移的信息。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)