下面的代码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) }