我正在为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:
被触发时又重新添加了(请参见注释)。