我想检测拖动手势的起始位置。我有一个只有 20 点宽的子视图。我向超级视图添加了一个拖动手势,并且仅当手势开始时的拖动手势起始位置在该子视图位置的 20 点以内时,我才想在这个子视图周围移动。我不想向这个子视图添加拖动手势,因为它已经在代码中引起了其他问题(在其他 SO 问题中报告,并且没有干净的解决方案)。所以我尝试将手势添加到超级视图。
我尝试了以下代码,但它不起作用,因为它无法检测手势开始的时间和地点。
DragGesture(minimumDistance: 0)
.updating($scrubberSeeking, body: { value, state, _ in
if abs(value.startLocation.x - scrubberOffset) > 20.0 {
state = false
return
}
state = true
})
.onChanged({ value in
if scrubberSeeking {
...
...
}
})
.onEnded { value in
}
要检测拖动手势首先从哪里开始,请尝试这种方法将拖动的开始位置存储到 var
dragStartPosition
中.onChanged
。然后在完成任何所需逻辑后将该 var 重置为 nil
.onEnded
,如示例代码所示:编辑-1
代码示例还可以拖动,
Circle
以及回答如何检测拖动手势首次开始的位置的问题。