【发布时间】:2012-04-03 02:16:08
【问题描述】:
我有一个问题,我认为可以通过一些黑客来解决,但我很好奇是否有更简单的方法来完成工作而不必做所有这些。
我有一堆 NSViews(层支持,如果这有助于提供更好的解决方案),如下所示:
这里的问题是,这本质上是一个菜单,但对悬停敏感。如果用户将鼠标悬停在较低级别视图的暴露部分之一上,我需要根据该视图的内容执行操作。它是一个动态系统,因此像这样堆叠的菜单项的数量可能会发生变化,从而使静态计算更加困难。如您所见,它们基本上都是第一个项目的副本(形状方面),但随后通过简单的变换旋转在堆栈中向下旋转一点。
我向 SO 社区提出的问题是,你们都认为获得 mouseEntered: 和 mouseExited: 事件的最佳方法是这些视图的字面可见部分?
我试图做的是在这些视图的 visibleRect 部分上使用 NSTrackingArea,这听起来比在这种情况下实际要方便得多。实际上,visibleRect 似乎一直对它们所有人“可见”。除了部分重叠的 NSView 之外,没有任何东西被明确阻止或隐藏。所发生的一切是我从所有视图中得到一个垃圾邮件控制台,立即尖叫鼠标进入他们的矩形。
我正在考虑的事情是制作每个菜单项的子 NSView,并让每个菜单项负责跟踪区域......每个菜单项的右侧和底部都有一个可以报告的“条形”视图,但是这仍然是一个 hack 并且是 icky。
有人有更好的主意吗?也许是经验之谈?
谢谢!
【问题讨论】:
标签: objective-c macos cocoa mouse nsview