我正在构建一个 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
源自startLocation
andlocation
字段。
您可以看到startLocation
和location
字段之间的变化。如果它是一个非常小的变化,我可以去抖动,但是有时我得到一个值的事实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
是我在撰写本文时错过的。但是,仍在寻找有关为什么轻击手势在 Rectangle 的某些点上重复单击时的平移为零,而在其他点上的平移为非零的信息。