0

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:被触发时添加回来(见评论)。

4

0 回答 0