【问题标题】:How to detect if NSWindow is dragged?如何检测 NSWindow 是否被拖动?
【发布时间】:2020-07-25 22:30:36
【问题描述】:

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

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

有人可以帮忙吗?非常感谢。

代码:

VStack{blabla}

 .frame(width: 40, height: 320)

 .contentShape(Rectangle())

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

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

【问题讨论】:

  • 不清楚问题的正文与问题的标题有何关系。您想在侧边栏中拖动整个窗口吗?

标签: swift macos cocoa swiftui nswindow


【解决方案1】:

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

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

示例:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多