问题标签 [nstrackingarea]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
638 浏览

cocoa - 我可以从非活动应用程序更改当前光标吗?

我有一个在后台运行的实用程序 Mac 应用程序(已LSUIElement启用)。在某些情况下,此应用程序会显示一个带有多个按钮的菜单窗口。问题是,当我将鼠标悬停在此窗口上时,鼠标光标仍会根据其下方的应用程序运行——当菜单下有文本时,光标会变为插入“I beam”形状。

显然我更喜欢常规的指针箭头。NSTrackingArea经过一些黑客攻击后,我已经潜入和朋友们,我可以检测到鼠标进入和鼠标退出事件。但是当我尝试使用NSCursor鼠标输入更改当前光标时,什么也没有发生。看起来机器拒绝从非活动应用程序更改光标,因为当我在鼠标输入事件之前激活应用程序时,光标会更改。

我不想仅仅为了改变光标而切换活动的应用程序。有没有办法从非活动应用程序中调整光标?

PS 在 cocoa-dev 上也有同样的问题:one , two

0 投票
1 回答
378 浏览

cocoa - NSImage 鼠标事件

我在自定义 NSView 子类中呈现了许多 NSImage。我希望在用户将鼠标悬停在这些图像上时放大这些图像,并且想知道执行此操作的最佳方法。

目前我正在使用 NSView 的 drawRect: 方法来合成图像,但也可以通过 NSImageView 实例自由地渲染它们,如果这会使事情变得更容易的话。我最初的直觉是为每个 NSImage 实例设置 NSTrackingArea,但想确保我没有遗漏一些明显的东西。

0 投票
2 回答
7643 浏览

objective-c - 当鼠标在滚动时离开 trackingArea 时,不会调用 mouseExited

为什么当鼠标通过滚动或做动画退出 NStrackingArea 时不调用 mouseExited/mouseEntered?

我创建这样的代码:

鼠标进入和退出:

追踪区域:

更多细节:

我在 NSScrollView 的视图中添加了 NSViews 作为子视图。每个 NSView 都有自己的跟踪区域,当我滚动滚动视图并离开跟踪区域时,不会调用“mouseExited”,但不滚动一切正常。问题是当我滚动时调用“updateTrackingAreas”,我认为这会产生问题。

*仅 NSView 没有将其添加为子视图也有同样的问题,所以这不是问题。

0 投票
1 回答
1517 浏览

objective-c - 禁用 NSView mousedown

我有一个 NSScrollView 将 NSView 设置为它的文档视图。我试图在 NSScrollView 中获取 mousedown 事件,但 NSView 一直在拦截它。有没有办法阻止这种情况发生?

还有一种方法可以在视图的一个区域中停止它,就像 NSTrackingArea 对 mouseentered 所做的那样。

提前致谢,

0 投票
0 回答
481 浏览

objective-c - 更改跟踪区域时,未检测到事件 mouseEntered

我有两个跟踪区域定义为:

我的问题是,当我直接从 area1 到 area2 时,不会调用 area2 的“mouseEntered”方法,因为检测到的事件是来自 area1 的“mouseExited”。离开 area1 并进入 area2 时,我应该怎么做才能检测到事件?

0 投票
1 回答
203 浏览

objective-c - 使用未检测/定义的拖放跟踪区域时

我的问题是,当我在视图中拖动某些东西时,没有检测到我的跟踪区域。

我有一个文本,我已经定义了一些跟踪区域,这样如果我检查文本的特定部分,我就会改变他的背景。现在我的问题是当我在拖动某些东西时越过它们时没有检测到跟踪区域。

在使用拖放时,有什么理由要大声跟踪区域检测?

0 投票
0 回答
524 浏览

cocoa - 表视图问题中的 NSTrackingArea

我已经将我的表格视图设置为有点像 Twitter 应用程序,这意味着当您将鼠标悬停在每一行上时,图标将出现在右侧,而离开该行时它们将消失。我基于此对其进行了编码:

当鼠标在滚动时离开 trackingArea 时,不会调用 mouseExited

非常奇怪的是,我在每一行(以及其他文本字段等)上都有一个复选框,当单击该复选框时,它会导致该行的图标跳到下一行。再次单击复选框将导致它们跳转到下一行。重复此操作,直到图标跳转到最后一个可见行,然后它们将跳转到第一个可见行并继续重复此行为。它只是偶尔发生。:-/ 我试图弄清楚这一点,但发生这种情况时甚至没有调用任何内容,这意味着没有调用跟踪区域或鼠标没有进入/退出任何内容。这是否有任何意义,也许考虑到我正在尝试重新创建 Twitter 是如何编码的?

谢谢,

rc

0 投票
0 回答
836 浏览

objective-c - 何时覆盖 updateTrackingAreas

所以我有一个相当大NSScrollView的几个自定义视图。在这些自定义视图中,我-(void)updateTrackingAreas像这样覆盖:

但不知何故,我觉得这有点低效,因为我在 NSScrollView 中有大约 50 个自定义视图实例,一次只有大约 5 个可见,这样我正在更新不可见视图的跟踪区域。

所以我想如果视图不在 NSScrollView 的可见矩形中,我会跳过更新跟踪区域。就像是:

这似乎运作良好,但我不确定这是否安全。

有人对这个问题有什么建议吗?

0 投票
2 回答
1163 浏览

macos - 自定义 NSStatusItem 和 NSView 不能可靠地接收 NSTrackingEvents

我有一个仅状态栏项目的应用程序,我试图在 mouseOver 上显示一个面板。我已经连接并工作了自定义状态项(和相关视图),但跟踪矩形仅在每十几个启动时接收事件。这使我相信某处发生了竞争情况,但我找不到。在我的自定义状态栏项目视图中:

在大多数启动时,应用程序不会响应跟踪鼠标事件,但每隔一段时间,mouseEntered:mouseExited:方法就会被正确调用,这让我完全困惑。这里发生了什么,我做错了什么?




编辑 07/17/2012
我根据@Streams 的回答更改了代码,但看到了同样的问题:




编辑 07/18/2012
这是一个准系统示例项目,它使用众所周知的 github 项目(由 @Stream 编写)来显示问题。它不能可靠地接收鼠标悬停事件,如果有的话。

0 投票
5 回答
5138 浏览

macos - 无法更改 NSTextField 的鼠标光标

我正在尝试更改NSTextField从 NIB 加载的窗口工作表中的鼠标光标。

NSTextField根据文档,我对resetCursorRects.

这永远不会被调用。即使在添加以下内容后也不行NSWindowViewController

我还尝试通过在子类中添加以下内容来使用跟踪区域NSTextField

也没有用。我究竟做错了什么?