如何创建 NSScrollWheel 类型的 NSEvent?
我想构造(假)一个 NSScrollWheel 类型的 NSEvent。还有一些其他类型的 NSEvent(mouseEvent、keyEvent、enterExitEvent、otherEvent)的 NSEvent 构造函数方法,但没有一个允许我设置,例如 deltaX。
I'd like to construct (fake) an NSEvent of type NSScrollWheel. There are NSEvent constructor methods for a few other types of NSEvents (mouseEvent, keyEvent, enterExitEvent, otherEvent), but none allows me to set, for example, deltaX.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
NSEvent 没有提供执行此操作的方法,但您可以创建一个 CGEvent 并围绕它创建一个 NSEvent 包装器。该事件将自动使用光标的当前位置。请参阅 CGEventCreateScrollWheelEvent。但是,使用 NSApplication 的
postEvent:atStart:
发布此事件不起作用(可能是因为它没有定义窗口)。您可以将 CGEvent 直接发布到事件流,也可以将 NSEvent 直接发送到视图的scrollWheel:
方法。NSEvent doesn't provide a way to do this, but you can create a CGEvent and create an NSEvent wrapper around it. The event will automatically use the current location of the cursor. See CGEventCreateScrollWheelEvent. However, posting this event using NSApplication's
postEvent:atStart:
doesn't work (probably because it doesn't have a window defined). You can either post the CGEvent directly to the event stream, or send the NSEvent directly to a view'sscrollWheel:
method.这个问题在 2020 年就出现在我面前。我想我应该为找到这个答案的人发布 Swift 5 语法。如果按下 ⌘ 键,NSScrollView 子类中的此覆盖将交换上/下右/左滚动行为:
This has come up for me in 2020. I thought I'd post the Swift 5 syntax for anyone finding this answer. This override in an NSScrollView subclass will swap up/down right/left scroll behavior if the ⌘ key is down:
您可以使用
CGEventCreateScrollWheelEvent
并将其转换到NSEvent
与eventWithCGEvent:
。要将信息添加到 CGEvent,请使用CGEventSetIntegerValueField
--其中可能的 字段 为kCGScrollWheelEventDeltaAxis1
、...2
和...3
。You can create a
CGEventRef
usingCGEventCreateScrollWheelEvent
and convert it to anNSEvent
witheventWithCGEvent:
. To add information to theCGEvent
, useCGEventSetIntegerValueField
-- among the possible fields arekCGScrollWheelEventDeltaAxis1
,...2
, and...3
.尝试以下代码:
Try following code:
我们可以从 CGEvent 创建scrollWheel NSEvent:
We can create scrollWheel NSEvent from CGEvent: