允许 DragGesture 在 SwiftUI 中从按钮开始吗?

问题描述 投票:0回答:2

下面的代码在屏幕中间呈现一个

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) }

swiftui gesture-recognition draggesture
2个回答
4
投票

而不是

.gesture(dragGesture)
尝试
.highPriorityGesture(dragGesture)


0
投票

您还应该能够使用 .simultaneousGesture(dragGesture)。

参考另一个SO评论建议这一点。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.