Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何在MacOS中检测当前NSView之外的鼠标事件?_Swift_Macos_Nsview_Appkit - Fatal编程技术网

Swift 如何在MacOS中检测当前NSView之外的鼠标事件?

Swift 如何在MacOS中检测当前NSView之外的鼠标事件?,swift,macos,nsview,appkit,Swift,Macos,Nsview,Appkit,由于我正在使用CALayer的mask属性来绘制和剪辑内容,因此掩码的大小类似于带有10像素边框的NSView,我的一些内容比当前带有10像素边框的NSView的大小大。但目前,鼠标移动事件似乎仅在鼠标移动到NSView区域时检测到,我试图使用NSTrackingArea负原点,但似乎不起作用 有人知道如何在当前视图之外检测鼠标移动事件吗 谢谢 埃里克 我的问题的更多细节: 我需要在我的视图外(在更大的视图内)绘制一些内容,并检测鼠标 事件在我的内容,这是我目前的限制,我不能使用更大的视图来绘制

由于我正在使用
CALayer的
mask属性来绘制和剪辑内容,因此掩码的大小类似于带有10像素边框的
NSView
,我的一些内容比当前带有10像素边框的
NSView的
大小大。但目前,鼠标移动事件似乎仅在鼠标移动到
NSView
区域时检测到,我试图使用
NSTrackingArea
负原点,但似乎不起作用

有人知道如何在当前视图之外检测鼠标移动事件吗

谢谢

埃里克

我的问题的更多细节:

我需要在我的视图外(在更大的视图内)绘制一些内容,并检测鼠标 事件在我的内容,这是我目前的限制,我不能使用更大的视图来绘制我的整个内容,只是认为它是一种特殊类型的阴影,我需要检测阴影上的鼠标事件,所以我用一个面具来剪辑整个内容。这是我用来制作面具的代码。边距是我希望从视图中扩展多少像素。(将此功能直接应用于NSView)

我用于应用跟踪区域的代码如下(在NSView子类中):


如果我不使用跟踪区域,我就不能在上面代码中提到的空白区域接收鼠标事件。不过,我现在只能收到“鼠标移动”消息。

谢谢,您的意思是我需要监视整个应用程序上的全局事件而不是我的视图吗?这个视图只是我完整应用程序的一小部分。我已经可以得到视图的鼠标移动了,我的问题是我不能在我的视图之外得到鼠标移动事件。因此,我想找到一种基于视图坐标检测鼠标移动事件的简单方法吗?我发现,我的问题可能是由于在初始化NSTrackingArea时的选项值“Invisible直立”引起的。似乎没有米什么矩形,我设置为初始化NSTrackingArea,一旦这个选项存在,我的所有矩形变得无效?我不确定这是我的问题的根本原因吗?在我删除“隐形竖立”选项后,正确地检测到“鼠标移动”,但我仍然无法获得“鼠标拖动”、“鼠标下降”、“鼠标上升”。。。设置跟踪区域后的鼠标状态相关事件。为什么需要设置跟踪区域?编辑您的问题并发布代码。确保提供一个
    func applyMaskToView(src: NSView, margin: CGFloat) {
    src.wantsLayer = true
    
    let mask = CALayer()
    mask.backgroundColor = NSColor.black.cgColor
    let maskFrame = CGRect(x: -margin,
                           y: -margin,
                           width: src.frame.size.width + 2*margin,
                           height: src.frame.size.height + 2*margin )
    mask.frame = maskFrame
    src.layer?.masksToBounds = false
    src.layer?.mask = mask
    return
}
    override func updateTrackingAreas() {

    var trackingArea: NSTrackingArea?

    let options1: NSTrackingArea.Options = [.mouseEnteredAndExited,
                                            .activeAlways, 
                                            .mouseMoved,
                                            .enabledDuringMouseDrag]

    let options2: NSTrackingArea.Options = [options1, .inVisibleRect]

    for area in self.trackingAreas {
        self.removeTrackingArea(area)
    }

    if let activeBound = self.layer?.mask?.frame {
         trackingArea = NSTrackingArea.init(rect: activeBound, options: options1, owner: self, userInfo: nil)
    }
    else {
        trackingArea = NSTrackingArea.init(rect: self.bounds, options: options2, owner: self, userInfo: nil)
    }
    
    self.addTrackingArea(trackingArea!)
    super.updateTrackingAreas()
    
}