我有一个NSWindow具有32px底部内容边框。在窗口视图内,我有两个自定义子视图。它们每个都有层支持,我正在用NSTrackingArea跟踪鼠标。我正在做的部分工作是使用CoreAnimation的一些mouseOver效果。一般来说,这不是问题,但是我注意到有些奇怪,想知道是否有人知道为什么会这样。

在设置trackingArea和mouseOver方法时,我对根层进行了测试并记录了层的名称,以便在调整窗口大小时可以看到各个子层的几何形状是否成立。在内部,它们看起来(和外观)很好。从视觉上看,它们在正确的位置,但是当我移动鼠标时,我注意到尽管鼠标实际上位于一个图层上,但hitTest返回的是位于其上方32 px的任何图层。但是,如果我删除内容边框,它将按您期望的那样工作,并返回正确的图层。

我显然需要内容边框,因此我有一个非常简单的解决方法,其中涉及将hitTest点偏移32px。这样做很好,但是似乎奇怪的是,内容边框的出现似乎使这些子视图的坐标系倾斜。有谁知道为什么会这样?

最佳答案

NSEvent返回相对于窗口坐标系而不是目标视图的鼠标位置。您可能需要调用convertRect:fromView:以获得正确的坐标。

10-06 03:43