SwiftUI拖动手势与位置和开始位置不一致



我正在构建一个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()
}
)

我遇到的问题是,翻译被报告为具有意外值。

报告的值根据我在矩形中单击的位置而有所不同。

下面是一组单独的点击。CCD_ 2是从CCD_ 3和CCD_。

您可以看到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,我在撰写本文时错过了它。然而,仍在寻找信息,说明为什么点击手势在矩形的某些点上重复点击时会有零平移,而在其他点上却有非零平移。

这个怎么样?

if gesture.translation.width/UIScreen.main.bounds.width < 0.05 &&
gesture.translation.height/UIScreen.main.bounds.height < 0.05 
{
print("tap") // 0.01 ~ 0.05
}

无论设备的大小和宽度&高度,它总是恒定的,因为它以百分比的形式下降。

最新更新