iqu*_*lis 4 macos cocoapods swift
我安装了最新的(2015-02-03)MASShortcut作为CocoaPod以及一个非常基本的OS X Swift应用程序的正确桥接头.我最终得到了以下代码,我不知道我做错了什么?:
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
func callback() {
NSLog("callback")
}
func applicationDidFinishLaunching(aNotification: NSNotification) {
let keyMask = NSEventModifierFlags.CommandKeyMask | NSEventModifierFlags.AlternateKeyMask
let shortcut = MASShortcut.shortcutWithKeyCode(kVK_Space, modifierFlags: UInt(keyMask.rawValue))
MASShortcut.addGlobalHotkeyMonitorWithShortcut(shortcut, handler: callback)
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
这里有一些问题.在修复它们之前,你应该确保MASShortcut安装了2.1.2(你可以在你的脑中看到这个Podfile.lock).如果你不这样做,你应该跑去pod update获得最新版本.
测试此问题的另一个潜在问题是您的快捷方式与OS X默认快捷方式冲突.在您当前的示例中,Command+ Option+ Space必须打开Finder窗口并选择搜索字段.如果您禁用此功能,那么我建议您添加Control到测试用例中.
因此到目前为止,您的代码存在一些问题.首先,我建议将您的keyMask声明更改为:
let keyMask: NSEventModifierFlags = .CommandKeyMask | .ControlKeyMask | .AlternateKeyMask
Run Code Online (Sandbox Code Playgroud)
通过这种方式,Swift可以推断出类型,你只需要NSEventModifierFlags一次(注意我在.ControlKeyMask这里添加了上面的评论).
关于Swift中枚举的一个很酷的部分是你可以调用rawValue它们.在这种情况下rawValue的NSEventModifierFlags是UInt创建快捷方式时,这将解决您的类型的问题.
现在你的keyCode论点也必须是一个UInt.所以你可以将它拉出一个临时值:
let keyCode = UInt(kVK_Space)
Run Code Online (Sandbox Code Playgroud)
在Swift中,看起来像类级初始化器的方法实际上是转入Swift初始化器.所以在这种情况下,你试图调用shortcutWithKeyCode:modifierFlags:当Swift实际上将其转换为初始化器时调用的类方法.所以你可以像这样创建你的快捷方式:
let shortcut = MASShortcut(keyCode: keyCode, modifierFlags: keyMask.rawValue)
Run Code Online (Sandbox Code Playgroud)
请注意rawValue将我们的修饰符标志转换为a 的调用UInt.
最后,全局注册此快捷方式的API实际上是一种方法MASShortcutMonitor.在您的桥接标题中,您有:
#import <MASShortcut/MASShortcut.h>
Run Code Online (Sandbox Code Playgroud)
您必须添加新导入才能获得此API.新的是:
#import <MASShortcut/MASShortcutMonitor.h>
Run Code Online (Sandbox Code Playgroud)
现在您可以注册您的快捷方式:
MASShortcutMonitor.sharedMonitor().registerShortcut(shortcut, withAction: callback)
Run Code Online (Sandbox Code Playgroud)
而你的一切.您的回调函数已正确设置!
最后一件事.我建议你删除你的快捷方式applicationWillTerminate::
MASShortcutMonitor.sharedMonitor().unregisterAllShortcuts()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
767 次 |
| 最近记录: |