在NSTrackingArea外部触发mouseMoved

时间:2019-01-13 15:32:58

标签: swift macos nstrackingarea

我正在为NSTrackingArea的特定部分设置NSTextView,以使mouseMoved等方法仅在此矩形内部时才被触发。这是我的代码:

let rect = ...
let ta = NSTrackingArea(rect: rect,
                     options: [.mouseEnteredAndExited, .mouseMoved, .activeWhenFirstResponder, .inVisibleRect],
                       owner: self,
                    userInfo: nil)
addTrackingArea(ta)

然而,mouseMoved等。整个视图都被解雇了。

所以我的问题是:当鼠标位于跟踪区域之外时,为什么会触发mouseMoved?上面的代码有错误吗?

编辑:

很明显,在某处,为整个视图添加了trackingArea,如我在调试面板中所见:

[NSTrackingArea 0x60000212a3f0: rect={{0, 0}, {800, 319.5}}, owner=0x60000390da00 userData=(null)
    NSTrackingMouseEnteredAndExited NSTrackingMouseMoved 
    NSTrackingActiveWhenFirstResponder
    NSTrackingInVisibleRect 
    installed enabled ]

删除super.updateTrackingAreas()不会更改此设置,因此发生了其他情况。我可以使用trackingAreas.forEach { if $0.rect == self.bounds { removeTrackingArea($0)} }将其删除,但是似乎在mouseMoved:被触发时又重新添加了(请参见注释)。

0 个答案:

没有答案