问题标签 [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 投票
2 回答
2510 浏览

nstextview - 将光标设置为指向文本视图的手

有没有办法在不继承 NSTextView 的情况下将光标设置为指向文本视图的指针?

我阅读了很多关于 NSTrackingAreas 的内容,测试了很多示例,设置了不同的跟踪选项并实现了不同的方法,但光标仍然是 I-Beam。我读过它是 AppKit 的自动功能,那么我该如何防止呢?

谢谢!

0 投票
1 回答
1752 浏览

objective-c - 具有翻转绘图坐标的 NSView 高度方向

我对一个自定义视图进行了子类化,并将其拖入 Interface Builder 的窗口中。当鼠标进入视图的边界时,我想改变视图的高度。我的问题是高度变化是向上而不是向下。我尝试翻转视图的坐标,(BOOL)isFlipped但它对高度变化的方向没有任何影响。关于如何改变向下方向的高度有什么帮助吗?

0 投票
2 回答
1725 浏览

objective-c - 当光标悬停在 NSTextView 内的 NSButton 时,如何强制光标成为“arrowCursor”?

好的,这是问题所在:
我有一个NSTextView并且我添加了我的自定义NSButton使用:

然后,在我的NSButton子类中,我有(连同这些NSTrackingArea东西):

但是当我将它悬停时,光标保持不变IBeamCursor(因为它是 a NSTextView)。只有当我按下按钮时,光标才会更新。然后,当我移动鼠标时,仍然在按钮内,光标回到IBeamCursor.

关于如何做到这一点的任何想法?谢谢!

0 投票
2 回答
1791 浏览

objective-c - NSCollectionView+NSScrollView 中的鼠标悬停

在 10.7+ 项目中,当鼠标位于集合视图项的视图范围内时,我试图在 NSCollectionViewItem 中启用 UI 元素。对于填充 NSCollectionView 的每个集合视图项,我有一个自定义视图,它使用其边界创建一个单独的 NSTrackingArea:

在滚动 NSCollectionView 内容之前,跟踪区域工作得很好。很明显,在滚动期间和之后需要重置跟踪区域。我尝试以多种方式使 NSTrackingAreas 无效并重新创建:

但这些尝试不仅有不完整和错误的结果,而且在滚动期间不断重新计算跟踪区域(ala 滚轮:)似乎没有必要。相反,有一种有效的方法来捕获滚动事件的开始和偏移(在 iOS 中很容易做到),这样我就可以在滚动期间使所有跟踪区域无效。在滚动视图的 contentView 上使用 NSViewBoundsDidChangeNotification 告诉我滚动正在发生,但它不指示它何时开始或停止。

从 NSScrollView 获取滚动开始和结束通知需要深度子类化还是我忽略了其他东西?是否有一种完全不同的方法可以显示更多的希望?

0 投票
1 回答
228 浏览

objective-c - 如何比较 NSEvent 的 trackingArea 以查看哪个 trackingArea 触发了“theEvent”

所以,我有这个 mouseEntered 事件,如果我鼠标进入一个 trackingArea,它将显示一个标签。但是,根据输入的 trackingArea,我想为标签设置一个自定义字符串。

主要问题是:如何获取输入的 trackingArea。

这是我的代码:

0 投票
0 回答
306 浏览

nsview - 在 NSView w/NSTrackingArea 中行进的蚂蚁

我将这个“墙 'o 代码”作为(大部分)完整的方法在自定义 NSView 中进行区域选择,并能够随后扩展/移动“行进的蚂蚁”矩形。

希望有人在那里发现它有用。

在此处输入图像描述

对“introThumbRect”的初始调用让球滚动起来。矩形的边可以随着鼠标光标的适当变化而扩大。选择矩形也可以移动。初始/生成的矩形位于视图的“thumbRect”属性中(相对于“fullImage”坐标系)。“cropPt”值是显示图像“fullImage”的左上角;出于此处的目的,假设它是 (0,0)。

我遇到的一个问题是,一旦发生鼠标拖动(即展开边或移动矩形),我正在使用鼠标光标将其保持在原始拖动状态。它想要恢复为箭头光标,而它应该将自己保持为例如张开手光标。我相信这是由于重新计算跟踪区域而发生的,但这样的问题实际上是不可能调试的,因为 XCode 不会“跟踪”光标状态。

如果有人可以帮助修复那个小错误,那就太好了。


0 投票
0 回答
98 浏览

macos - Today Extension 中的 NSTrackingArea 不提供事件

我正在为应该控制 iTunes 的 Mac 开发 Today Extension。它可以正常工作,但我的 UI 包含一个方形封面艺术图像,上面覆盖着效果视图,其中包含元数据和控件:

德普

现在,很明显,如果我能以某种方式让它们仅在需要时出现——比如说,当鼠标光标位于我的扩展程序视图上方时,那就太好了。

正如我之前处理过这类事情一样,我决定将一个小子NSView类放在一起,用于NSTrackingArea在鼠标进入或存在其边界时触发通知:

(摘自我在 GitHub 上的完整代码。

这些NSLogs 可以帮助我进行调试:尽管我的光标毫无问题地移入和移出视图,但它们永远不会触发。

我一直在查看 Apple 的文档,但找不到任何明确禁止此类事情的内容,或者解释为什么它不起作用。它是一个标准的NSView子类,在一个 中NSViewController,但显示在通知中心,而不是一个独立的应用程序。

任何关于为什么这个简单的跟踪区域视图在 Today Extension 中不起作用的建议都值得赞赏。

0 投票
3 回答
1426 浏览

objective-c - 在 NSTableCellView 中滚动时跟踪鼠标事件的问题

我在自定义表格单元格视图上有弹出按钮,当鼠标光标移动到一个单元格上时,将显示单元格的这些按钮,并且只有这个单元格应该显示按钮。如果我缓慢移动鼠标光标,一切正常,但是当我用鼠标中键更快地滚动表格视图时,会显示太多带有弹出按钮的单元格,真正应该避免的是。滚动时不知何故未正确跟踪鼠标事件。我从 Apple 示例库中获得了此跟踪代码。你能给这个问题一些建议吗?

这是打印出来的日志:

0 投票
2 回答
6614 浏览

cocoa - 如何用动画实现 NSTrackingArea 的 mouseEntered/Exited?

我想实现一个功能,当用户将鼠标悬停在特定区域上时,新视图会出现类似抽屉的动画。而且,当用户离开特定区域时,抽屉应该以动画形式消失。这正是您在 OS X 中将鼠标悬停在屏幕底部时所看到的,其中 Dock 会随着动画的出现和消失。

但是,如果我用动画实现该功能,则在动画完成之前重新进入特定区域时,它无法正常工作mouseExited:。这是我的代码:

在这段代码中,我drawerView通过改变它的x位置来制作动画。但是,正如我所说,当您进入跟踪区域然后离开跟踪区域时,抽屉可以正常工作。但是,如果在离开动画完全完成之前重新进入跟踪区域,则情况并非如此。

当然,如果我将动画持续时间设置得更短,例如0.1,这种情况很少发生。但我想用动画移动视图。

我想要做的是让drawerViewstart 再次出现,即使视图还没有完全消失。有什么练习可以做到吗?

0 投票
1 回答
638 浏览

cocoa - 非关键窗口时 NSTrackingArea 不能完全工作

先来点上下文。本质上,我有一个覆盖桌面的窗口。在它上面我有一些允许用户交互的 WebKit WebView 视图。正如人们所期望的那样,默认情况下,当另一个应用程序处于活动状态时,它不会接收到这些事件(例如悬停、鼠标输入和单击)。我可以通过先单击我的窗口,然后移动鼠标来使其工作,但这不利于可用性。我还设法让它在光标进入时激活窗口,但它远非理想而且相当hacky。

因此,我尝试使用跟踪区域。目前在 WebViews superview 我有这个跟踪区域:

这可以按我的意愿工作,我正在接收所有鼠标事件。但是,WebView 似乎没有按预期响应。JavaScript 鼠标移动事件仅在我按住并拖动时触发,而不仅仅是悬停和拖动。

我尝试使用 hitTest 来获得正确的视图,但似乎没有任何效果。这是一个示例方法,我使用的是 isHandlingMouse 布尔值,因为没有它,似乎由于某种原因创建了无限循环:

“命中”视图是一个 WebHTMLView,它似乎是一个私有类。一切似乎都应该正常工作,但也许我正在做的事情正在破坏它,或者我错误地将事件发送到 WebHTMLView。