我试图检测手指何时第一次接触 SwiftUI 中的视图。我可以用 UIKit Events 很容易地做到这一点,但在 SwiftUI 中无法解决这个问题。
我已经尝试了最小移动为 0 的 DragGesture,但在您的手指移动之前它仍然不会改变。
TapGesture 仅在您抬起手指时才起作用,并且无论我将参数设置为什么,LongPressGesture 都不会足够快地触发。
DragGesture(minimumDistance: 0, coordinateSpace: .local).onChanged({ _ in print("down")})
LongPressGesture(minimumDuration: 0.01, maximumDistance: 100).onEnded({_ in print("down")})
Run Code Online (Sandbox Code Playgroud)
我想在手指与视图接触后立即检测 touchDown 事件。Apple 的默认手势对距离或时间都有限制。
更新:这不再是问题,因为 Apple 似乎更新了 DragGesture 的工作方式,或者我可能遇到了特定的上下文错误。
所以我有一些ScrollView看法:
ScrollView {
ForEach(cities) { city in
NavigationLink(destination: ...) {
CityRow(city: city)
}
.buttonStyle(BackgroundButtonStyle())
}
}
Run Code Online (Sandbox Code Playgroud)
在每个视图中,我都有一个拖动手势:
let drag = DragGesture()
.updating($gestureState) { value, gestureState, _ in
// ...
}
.onEnded { value in
// ...
}
Run Code Online (Sandbox Code Playgroud)
我分配给视图的一部分:
ZStack(alignment: .leading) {
HStack {
// ...
}
HStack {
// ...
}
.gesture(drag)
}
Run Code Online (Sandbox Code Playgroud)
一旦我附加了手势,就ScrollView停止滚动。使其滚动的唯一方法是从没有手势的部分开始滚动。我如何避免这种情况并使两者一起工作。在UIKit中,就像true在shouldRecognizeSimultaneouslyWithmethod中指定一样简单。我如何在SwiftUI中拥有相同的功能?
在SwiftUI中,我尝试使用.simultaneousGesture(drag)和附加手势.highPriorityGesture(drag)-它们的工作原理都与相同.gesture(drag)。我还尝试GestureMask为including:参数提供所有可能的静态值-我可以滚动工作,也可以拖动手势工作。从来没有两个。