swift - 如何检测NSWindow是否被拖动?

标签 swift macos cocoa swiftui nswindow

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

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

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

代码:

VStack{blabla}

 .frame(width: 40, height: 320)

 .contentShape(Rectangle())

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

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

最佳答案

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

在以下示例中,当拖动 VStack 时,捕获的值将重新渲染 UI,其中将使用该值确定 位置 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)
        })
    }
}

关于swift - 如何检测NSWindow是否被拖动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61186633/

相关文章:

ios - UIImageView 和 ScrollView 奇怪的行为

swift - 台风:从 Storyboard OS X 注入(inject) Controller

ios - EXC_BAD_ACCESS 在使用 UIWebView 对 ViewController 执行 segue 时?

swift - 将字符串转换为 URL(为什么结果变量为 nil)

objective-c - NSTextField 不会更新

objective-c - Javascript 与 Safari 插件交互的全局对象

objective-c - Swift 无法将符合协议(protocol)的类作为函数参数传递给 Objective-C 文件中的函数

python - 如何在 Mac OS X 上安装 Python 开发头文件?

python - 为什么 `source` 在 .bash_profile 中与 virtualenvwrapper 一起使用?

swift - 从 XIB 加载 View 并获取 nil macOS 应用程序