0

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

4

0 回答 0