将以下依赖项添加到你的 Package.swift
文件中
.package(url: "https://github.com/jordanbaird/SwiftKeys", from: "0.2.0")
首先创建一个 KeyCommand
的实例。观察它,并在 keyDown
、keyUp
和 doubleTap(_:)
上执行操作
let command = KeyCommand(name: "ToggleMainWindow")
command.observe(.keyDown) {
myCustomKeyDownAction()
}
command.observe(.keyUp) {
myCustomKeyUpAction()
}
command.observe(.doubleTap(0.2)) {
myCustomDoubleTapAction()
}
doubleTap(_:)
允许你指定一个最大时间间隔,两次按键必须在此间隔内才被视为“双击”。
使用按键命令的名称来创建一个按键录制器。然后,将其添加到视图中(注意 SwiftUI 使用 KeyRecorderView
,而 Cocoa 使用 KeyRecorder
)
struct SettingsView: View {
var body: some View {
KeyRecorderView(name: "ToggleMainWindow")
}
}
class SettingsViewController: NSViewController {
let recorder = KeyRecorder(name: "ToggleMainWindow")
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(recorder)
}
}
结果应该看起来像这样
浅色模式 | 深色模式 |
---|---|
![]() |
![]() |
录制器和命令将彼此保持同步,因此当用户录制新的按键组合时,命令将更新以匹配新值。
为了提高类型安全性,你可以创建硬编码的命令名称,这些名称可以在整个应用程序中被引用。
Misc.swift
extension KeyCommand.Name {
static let toggleMainWindow = Self("ToggleMainWindow")
}
AppDelegate.swift
let command = KeyCommand(name: .toggleMainWindow)
SettingsView.swift
let recorder = KeyRecorder(name: .toggleMainWindow)
按键命令会自动存储在 UserDefaults
系统中,并使用其名称作为键。 UserDefaults
键通常会根据其对应的应用程序或子系统进行前缀或命名空间。 为此,SwiftKeys 允许你提供可以应用于单个名称的自定义前缀。
extension KeyCommand.Name.Prefix {
static let settings = Self("Settings")
static let app = Self("MyGreatApp")
}
extension KeyCommand.Name {
// "SettingsOpen" will be the full UserDefaults key.
static let openSettings = Self("Open", prefix: .settings)
// "MyGreatApp_Quit" will be the full UserDefaults key.
static let quitApp = Self("Quit", prefix: .app, separator: "_")
}
SwiftKeys 在 MIT 许可证下可用。