下面的代码在屏幕中间呈现一个
View
,并允许您拖动该 View
。但是,如果您在 Button
上开始拖动,则拖动不起作用。您需要拖动 View
周围的 Button
区域。
有没有办法让这两个手势相互了解,以便您可以从
View
中的任何位置开始拖动,甚至可以在 Button
上方?
我想象将手指放在
Button
上会启动这两种手势,然后您是否会抬起或开始拖动以在两者之间做出决定。
struct ContentView: View {
@State private var dragOffset: CGSize = .zero
@State private var dragStartOffset: CGSize? = nil
var body: some View {
ZStack {
Button("Hello") { print("hello") }
.padding(30)
.background(.regularMaterial)
.gesture(dragGesture)
.offset(dragOffset)
}
}
private var dragGesture: some Gesture {
DragGesture(minimumDistance: 0, coordinateSpace: .global)
.onChanged { value in
if dragStartOffset == nil {
dragStartOffset = dragOffset
}
dragOffset = dragStartOffset! + value.translation
}
.onEnded { _ in
dragStartOffset = nil
}
}
}
func +(a: CGSize, b: CGSize) -> CGSize { CGSize(width: a.width + b.width, height: a.height + b.height) }
而不是
.gesture(dragGesture)
尝试 .highPriorityGesture(dragGesture)
。
您还应该能够使用 .simultaneousGesture(dragGesture)。
参考另一个SO评论建议这一点。