mouseDragged不在NSView框架之外

mar*_*ker 5 cocoa objective-c nsview

我正在努力理解为什么当鼠标位于视图外部时,为什么要为我的NSView子类之一调用mouseDragged而不为另一个子类调用。

子类1以编程方式添加到NSWindow,然后作为子窗口添加到主应用程序窗口。当在视图内单击鼠标并拖动鼠标时,即使鼠标超出视图框架,也会继续调用mouseDragged。这就是我要发生的事情。

在XIB文件中,子类2被分配给应用程序主窗口中的自定义视图对象。在这种情况下,仅当鼠标停留在视图内时才触发mouseDragged事件。

有什么明显的我想念的吗?

Pet*_*wis 1

我经历过类似的事情,但每个窗口中都是相同的 NSView 子类。其中一个(在父窗口中)按预期工作。另一个(在子窗口中)仅当鼠标位于视图上方时才能看到 mouseDragged。

事实证明,原因是 NSImageView 与有问题的视图位于同一视图中,但重叠。因为 NSImageView 仅在其边界的一部分绘制图像,所以这从来都不是问题,但事实证明这是导致有问题的视图跟踪问题的原因。

我调整了 NSImageView 的添加方式,将其放置在子视图的底部:

[parentView addSubview:myImageView positioned:NSWindowBelow relativeTo:nil];
Run Code Online (Sandbox Code Playgroud)

有问题的视图也已经在parentView中,因此addSubview:将myImageView添加到有问题的视图上方。

这为我解决了这个问题。