NSTrackingArea
我正在为我的特定部分设置一个NSTextView
,以便mouseMoved
仅在此矩形内触发 etc 方法。这是我的代码:
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:
被触发时添加回来(见评论)。