0

以下のコード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) }

4

0 に答える 0