首页 > 解决方案 > 如何检测 NSWindow 是否被拖动?

问题描述

我正在使用 SwiftUI。我有一个名为 SideBar 的视图,它由 VStack 和其中的按钮组成。

我尝试在 VStack 上附加一些手势,例如DragGesture()TapGesture() onended,希望它能检测到用户何时拖动视图,但这并不总是有效,我也认为这是超级黑客。

有人能帮忙吗?非常感谢。

代码:

VStack{blabla}

 .frame(width: 40, height: 320)

 .contentShape(Rectangle())

 .gesture(
   TapGesture().onEnded{_ in
     print("end click")
    }
  )

 .gesture(
   DragGesture().onEnded{_ in
    print("end drag")
   }
  )

标签: swiftmacoscocoaswiftuinswindow

解决方案


DragGesture().onChanged(_:)应该够了。
您可以获得更新的拖动值,您可以决定如何使用。

在以下示例中,当VStack拖动 时,捕获的值将重新呈现 UI,它将用于position确定VStack.

例子:

struct ContentView: View {
    @State var position = CGPoint(x: 100, y: 100)

    var body: some View {
        VStack {
            Text("Hello, World")
        }
        .background(Color.gray)
        .position(position)
        .gesture(DragGesture()
        .onChanged { (value) in
            self.position = CGPoint(x: value.location.x,
                                    y: value.location.y)
        })
    }
}

推荐阅读