问题标签 [nsevent]
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.
macos - 如何在 OSX 上实现 scrollWheel 弹性滚动
我正在尝试创建一个自定义视图,它类似于 NSScrollView,但基于 CoreAnimation CAScrollLayer/CATiledLayer。基本上,我的应用程序需要大量近乎实时的 CGPath 绘图,并使用形状图层为这些路径设置动画(类似于 GarageBand 在录制时设置动画的方式)。我创建的第一个原型使用 NSScrollView,但我无法获得超过 20 帧/秒(原因是 NSRulerView 每次滚动事件发生时都会通过绘制更新,整个调用流程从 -[NSClipView scrollToPoint] 到 -[ NSScrollView reflectScrolledClipView:] 非常昂贵且效率低下)。
我创建了一个自定义视图,它使用 CAScrollLayer 作为滚动机制,使用 CATiledLayer 作为传统的 documentView(用于无限滚动选项),现在我可以接近 60fps。但是,我很难实现 scrollWheel 弹性滚动,而且我不知道该怎么做。这是我到目前为止的代码,如果有人能告诉我如何实现弹性滚动,我将不胜感激。
objective-c - 在 Cocoa 的屏幕上观察全局鼠标位置?
我希望在鼠标移动并获取屏幕上的位置时收到通知。我试过这个:
然而,这似乎只在鼠标在我的应用程序窗口中时才有效。只要离开它,我就没有通知。直到我再次进入窗口。这个事件不应该是全球性的吗?
更新:
我提取了有问题的代码并制作了一个单独的示例项目(Dropbox-Link)。可以肯定的是,没有其他任何东西可以干扰它。这是一个干净的项目,只有上面的代码applicationDidFinishLaunching:
。我得到相同的结果,这真的很奇怪。我将视频上传到 youtube:http ://www.youtube.com/watch?v=I3AKgmURaMk 。
这些是我的观察:
- 启动应用程序后,无论我将鼠标移动到何处,都不会立即传递任何事件。
- 单击应用程序的窗口将以某种方式激活事件传递。现在我收到 NSMouseMovedMask 事件,无论我在哪里移动鼠标(这是我想要实现的)。
- 单击返回 Xcode 不会改变任何内容。我不断收到事件。
- 但是,将焦点移回我的应用程序会导致奇怪的行为。当我将鼠标移到 Xcode 上时,我只会在窗口的某些部分上获得事件,而某些部分似乎会吸收事件。更具体地说,我没有通过编辑器或日志视图接收事件。我只在将鼠标移到灰色拆分视图分隔符区域(其中嵌入了标签栏)时才收到它们。
objective-c - mouseEntered 事件上的 NSButton 图像阴影
我有一个无边框的 NSButton,它包含一个图像,并且是我的 ButtonEffect 类的子类,以检测 mouseEntered 和 mouseExited 事件。我的目标是在鼠标进入按钮区域时让图像的边缘发光。我知道我可以通过使用两个不同的图像(一个有阴影,另一个没有)来实现这一点,但我需要用一个图像来做到这一点。
这是我希望为 mouseEntered 事件实现的示例:
这是光标离开按钮区域后的样子:
这是我通过设置单元格背景的尝试,但它改变了整个按钮区域的颜色。
objective-c - 在 Objective-C 中设置键盘键只有一个目的
我需要一点帮助来找出一种方法,让键盘按键只有一个用途。我解释说:现在,键盘上的 1-8 键有一个与它们相关的动作NSEvent
和FirstResponder
。他们调用一个方法。问题是我需要能够通过在我的应用程序中的任何位置按 1-8 来调用此方法,因此当焦点设置在 TextField 上时,我可以使用这些键。我不希望 1-8 有他们通常的目的。数字键盘将是我可以使用数字的地方。我的问题:我想知道是否有办法做我想做的事?
提前致谢!
objective-c - NSEvent addGlobalMonitorForEventsMatchingMask:热键拦截
Control我想拦截以+开头Shift并以字符结尾的热键(强制)。
我有以下代码:
我需要在我的代码中添加什么来检查用户是否按下了ControlShift+字符,以及用户按下了什么字符?
只有当我上面所说的是真的时,才会执行
代码。
这是我正在寻找的伪代码:NSLog(@"pressed!");
所以如果用户按下Control+ Shift+1 我会做一件事,如果Control+ Shift+2 做另一件事,依此类推......
macos - 如何检测 OS X 中大写锁定键的键向上或键释放?
我在 OS X 检测击键时遇到问题。每当按下键盘键时,我都需要检测按键按下和按键释放或按键向上。当使用[ NSEvent addLocalMonitorForEventsMatchingMask: handler: ]
. 这使您可以拦截和修改NSEvent
各种事件类型的 s,包括常规打印键,以及NSKeyUp
可用于检测 shift、ctrl、alt 和 cmd 键的 s。事实上,由于 shift、ctrl、alt 和 cmd 键的上键和下键的修饰符标志都发生了变化,因此可以通过检查.NSKeyDown
NSFlagsChanged
NSFlagsChanged
[NSEvent modifierFlags]
[NSEvent keyCode]
但是,Capslock 是不同的。因为 capslock 修饰符实际上只对按下的键起作用,所以当你按下 capslock 时,你只会得到一个NSFlagsChanged
with capslock 被按下,而不是在它被释放时。并且不会使用修饰键(如 capslock 和 shift 和 ctrl 等)发出NSKeyUp
。NSKeyDown
任何人都可以提出一种方法,甚至是较低级别的界面,来获取大写锁定键事件吗?我将不得不求助于使用 kqueues 或其他东西吗?
cocoa - 更改 NSTextField 连续多次单击的行为
我有一个NSTextField
由自定义视图嵌套的,我想更改连续多次单击的默认行为(双击、三次单击等),类似于文本节点 MindNode 的行为(见下图)。
我希望第一次单击以“激活”文本字段,然后从头开始(例如重置事件的单击计数)。
我有以下想法,但我不知道如何实现它们以及它们是否真的有意义:
- 以某种方式更改使用时间
+[NSEvent doubleClickInterval]
并减慢第二次点击。 - 以编程方式减少点击次数?
- 使用 使 NSTextField 不可选择
-hitTest:
,将点击转发到超级视图,更改文本字段的某些参数并接受下一次点击。在这种情况下,第二次点击的点击次数仍然是 2。 - 覆盖
-mouseDown:
而不是调用超级。这破坏了 NSTextField 的选择功能。
我希望有一种更简单的方法来实现这一点,但我忽略了这一点。
感谢您的回答!
这是问题的图形表示:
objective-c - 有没有办法识别 NSNotification / NSEvent 来自哪个应用程序?
我已经开始收听全球keyDown
事件。有没有办法从该事件来自哪个应用程序获取信息?
处理程序接收NSNotification
实例并NSEvent
成为其中的一部分。我能以某种方式从这些对象中提取这些信息吗?
听力片段:
观察员:
更新
全局按键不会从任何特定应用程序发送。我真正需要的是在事件处理程序中检查当前活动的应用程序:
这会返回NSDictionary
我需要的信息。
cocoa - 使用 CGWindowListCopyWindowInfo 是否可以计算出鼠标指针在哪个窗口上方?
使用 CGWindowListCopyWindowInfo 是否可以确定鼠标指针是否在列出的任何窗口上?
我遇到的问题是 CGWindowListCopyWindowInfo 提供的窗口边界是基于左上角的。但是像...
是基于左下角的原点。
macos - 如何为多点触控手势添加 GlobalMonitorForEventsMatchingMask?
一切都很好 -在本地- 与......
NSLOGevent type: 12
但是,我在全局处理程序中没有收到任何手势事件。(尽管其他类型、滚动、单击等确实有效。)
NSLOG
这低于 10.8。我意识到手势不会在 10.6 上得到报告。但文档没有表明这不应该起作用。有任何想法吗?