我在 NSView 中创建了一个跟踪区域,它应该只在窗口是关键窗口时跟踪鼠标移动事件。但是,我注意到有时,当窗口与另一个当前为键的窗口重叠时,不再是键窗口的背景窗口仍会收到 mouseMoved: 事件。
这是我在 NSView 子类中的代码:
if (_trackingArea != nil) {
[self removeTrackingArea:_trackingArea];
}
_trackingArea = [[NSTrackingArea alloc]
initWithRect:trackingFrame
options:(NSTrackingAreaOptions)(NSTrackingMouseMoved | NSTrackingActiveInKeyWindow)
owner:self
userInfo:nil];
[self addTrackingArea:_trackingArea];
我添加NSLog(@"is window key %d", [[self window] isKeyWindow])了-mouseMoved:它,它清楚地表明背景窗口不是关键,尽管它仍然接收鼠标移动事件。
在我单击背景窗口使其成为键,然后再次单击前景窗口使其成为键后,此工件消失了。然后后台窗口停止接收鼠标移动事件。
这是 NSTrackingArea 的错误,有什么办法可以解决吗?
更新:我注意到此错误仅在后台窗口以编程方式调整大小时出现,而前台窗口具有键盘焦点。