通过拖动NSView移动NSWindow

Leo*_*etz 6 macos cocoa nsview nswindow swift

我有一个NSWindow,我在上面申请:

window.styleMask = window.styleMask | NSFullSizeContentViewWindowMask
window.titleVisibility = NSWindowTitleVisibility.Hidden;
window.titlebarAppearsTransparent = true;
Run Code Online (Sandbox Code Playgroud)

然后我在标题栏后面添加一个NSView来模拟一个更大的.现在它看起来像这样: 当前窗口

我希望能够通过拖动浅蓝色视图来移动窗口.我已经尝试子类化NSView并使用以下代码始终为mouseDownCanMoveWindow返回true:

class LSViewD: NSView {
    override var mouseDownCanMoveWindow:Bool {
        get {
            return true
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这没用.经过一些谷歌搜索后,我在GitHub上找到了这个INAppStoreWindow.但它不支持超过10.9的OS X版本,所以它对我来说完全没用.

EDIT1

这就是它在Interface Builder中的外观. Interface Builder

如何通过拖动此NSView来移动窗口?

Osk*_*kar 14

这里没有一个答案对我有用。它们要么根本不起作用,要么使整个窗口可拖动(请注意,OP 并没有要求这样做)。

以下是实际实现这一目标的方法:

要使 NSView 使用其拖动事件控制窗口,只需将其子类化并覆盖mouseDown如下:

class WindowDragView: NSView {

    override public func mouseDown(with event: NSEvent) {
        window?.performDrag(with: event)
    }

}
Run Code Online (Sandbox Code Playgroud)

就是这样。该mouseDown函数将进一步的事件跟踪传输到它的父窗口。

不需要窗口遮罩,isMovableByWindowBackgroundmouseDownCanMoveWindow.


Ken*_*ses 12

尝试将窗口的movableByWindowBackground属性设置为true.


man*_*ahn 2

有两种方法可以做到这一点。第一个是将NSTexturedBackgroundWindowMask窗口背景颜色设置为您的视图颜色。这应该有效。

否则你可以看看这个示例代码