我一直试图在堆栈溢出时找到这个,但只得到了一个关于同时按下非修改键的链接,这需要一些状态检查才能得到所需的结果。
我正在尝试创建命令,如command+1、command+2、…、command+n或option+I或ctrl+q,每一个都是修改键和非修改键的组合。
我使用所有重写,如keyDown和keyUp,并使用InterpretKeyEvents重写其他键,如cancelOperation或newLine。
我找到了一个覆盖,它接受修改键的状态(flagsChanged)
但上面的内容似乎只注册了修改键的状态,我可以用NSEvent的修改标记检查器将其取出,但我似乎无法让同时按下的键调用所需的函数。
我试图使用不同的组合来访问数字键,因此每个修饰符+数字键都将为我提供该数字的不同配置。
最佳答案
为了完整起见,多亏你们的建议,我采取了以下方法:
1-指向整数的字母数字键词典
指向与alfanumericals的整数返回相关联的函数的2字典
3-下面的密钥捕获代码。可以通过将两个函数指针关联到修饰符rawIndex值来改进它,但这对于可能有问题或可能提出相同问题的任何人都应该足够了。分析,我得到平均0.2-0.8毫秒的响应时间之间的按键和调用函数跟踪结束。
override func keyDown(with event: NSEvent) {
let modifierFlags = event.modifierFlags
let key = event.characters!
if !event.isARepeat{
if modifierFlags.rawValue == 256{
//No modifiers pressed
guard let track = Int(key) else{
//not a number key so proceed with the function library containing relevant pointers
functionLib[keys[key]!]!(0)
//keys is [String: Int]
return
}
//Proceed with another function as we are using number keys
command(keys[key]!)
}else if modifierFlags.contains(NSEventModifierFlags.command){
//Command key is being pressed simultaneously
guard let track = Int(key) else{
//Go into command and non number key combinations
functionLib[commandKeys[key]!]!(0)
return
}
//Command and number key combo function call
openTrack(track)
}
}
}
注意:函数库中有一些void函数允许未映射的键指向返回函数,因此有几个字典:keys only、command+key、option+key等。。对于获取要使用的完整命令集很有用。
另外,避免if-else语句并获得1-3个渐近点的一个额外步骤是将修饰符键rawValue与它自己的dict相关联。可能是单子结构的某种东西,但它看起来足够快。
关于swift - Swift OSX:同时命令+非修饰键事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46290081/