macOS用户输入事件NSEvent
macOS用户输入事件NSEvent

macOS用户输入事件NSEvent

NSEvent 是 macOS AppKit 框架中用于表示用户输入事件(例如鼠标、键盘、触控板等)的核心类。几乎所有用户交互行为都会被封装为一个 NSEvent 对象,并由系统传递给 app 的响应链。

基本功能

NSEvent 代表系统级事件对象,可以:

监听键盘按键(按下、松开)。

监听鼠标移动、点击、滚动。

监听触控板手势(两指滚动、捏合缩放等)。

响应系统事件(如 app 激活、窗口焦点变化)。

常见事件类型

NSEvent.EventType 是枚举类型,代表事件种类:

1、.leftMouseDown:鼠标左键按下。

2、.rightMouseUp:鼠标右键放开。

3、.mouseMoved:鼠标移动。

4、.scrollWheel:鼠标滚轮或触控板滚动。

5、.keyDown:键盘按下。

6、.keyUp:键盘松开。

7、.flagsChanged:修饰键(Shift/Command)变化。

8、.magnify:捏合放大。

9、.swipe:触控板滑动。

常用属性

1、type:NSEvent.EventType类型,事件类型。

2、locationInWindow:NSPoint类型,鼠标/触摸事件相对窗口的位置。

3、modifierFlags:NSEvent.ModifierFlags类型,当前按下的修饰键(如 ⌘ ⌥ ⇧)。

可组合使用:

event.modifierFlags.contains(.command)
event.modifierFlags.contains(.shift)
event.modifierFlags.intersection([.command, .option])

全部修饰符包括:.command、.option、.shift、.control、.capsLock和.function(Fn)。

4、characters:String?类型,键盘事件输入的字符。

5、keyCode:UInt16类型,原始键盘 keyCode。

6、deltaX / deltaY:CGFloat类型,滚轮或手势滑动距离。

7、timestamp:TimeInterval类型,事件发生的时间戳。

常见函数

自定义事件响应的常见函数(可在 NSView、NSWindow 中重写)。

1、mouseDown(with:):鼠标按下。

2、mouseDragged(with:):鼠标拖动。

3、mouseUp(with:):鼠标释放。

4、scrollWheel(with:):鼠标滚动。

5、keyDown(with:):键盘按下。

6、keyUp(with:):键盘松开。

使用示例

1、重写 keyDown 处理键盘事件

override func keyDown(with event: NSEvent) {
    if event.characters == "a" {
        print("A 键被按下")
    }
}

2、鼠标点击事件

override func mouseDown(with event: NSEvent) {
    let point = event.locationInWindow
    print("鼠标点击位置:\(point)")
}

3、监听全局事件(例如捕获快捷键)

NSEvent.addGlobalMonitorForEvents(matching: .keyDown) { event in
    print("全局按键:\(event.characters ?? "")")
}

GlobalMonitor 无法处理事件(例如不能拦截),只能监听。

事件传递机制

NSEvent 被系统发送到视图树上的响应链中,由最先响应的 NSResponder(比如 NSView, NSWindow, NSViewController)依次处理。

比如:

1、用户点击窗口 → 系统创建 NSEvent。

2、发送到最前面的窗口(NSWindow)。

3、传递到窗口的 contentView。

4、传到具体控件(如 NSButton)。

总结

在macOS(AppKit)开发中,监听键盘和鼠标、处理触控板手势、实现快捷键等功能,需要使用NSEvent。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注