以下のコードView
は、画面の中央に を表示し、それをドラッグできるようにしますView
。ただし、上でドラッグを開始するButton
と、ドラッグが機能しません。View
の周りの領域をドラッグする必要がありますButton
。
View
これら 2 つのジェスチャを相互に認識させて、のどこからでもドラッグを開始できるようにする方法はありButton
ますか?
指を下に置くと、Button
両方のジェスチャーが可能性として開始され、持ち上げるかドラッグを開始して、2つの間で決定すると想像しています.
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) }