我试图不断检查是否按下了一个键。一旦完成,我想运行一段代码。到目前为止,我正在尝试执行以下操作:
func someFunctionCall {
//do stuff here
//check until key is pressed
while(!spacePressed) {
if(spacePressed) {
//do more stuff in here
}
}
}
这是我检测按键的地方:
public override func keyDown(with event: NSEvent) {
switch Int(event.keyCode) {
case kVK_Space:
spacePressed = true
default:
break
}
}
public override func keyUp(with event: NSEvent) {
switch Int(event.keyCode) {
case kVK_Space:
spacePressed = false
default:
break
}
}
我希望while循环不断检查按键是否发生。当我运行程序时,它会在while循环开始时冻结(我假设它陷入了无限循环)。这是解决问题的正确方法吗?
答案 0 :(得分:0)
似乎您的“主线程”正在连续执行循环,因此无法执行其他指令。
因此,当您的空间不足时,您可以调用函数。
类似这样的东西:
var timer:Timer?
func someFunctionCall() {
// do exterior loop stuff here
}
func didSpaceDown(){
timer = Timer.scheduledTimer(withTimeInterval: 5, repeats: true) { (timer) in
//Do your inside loop stuff here
}
}
override func keyDown(with event: NSEvent) {
if Int(event.keyCode) == KVK_Space{
didSpaceDown()
}
}
override func keyUp(with event: NSEvent) {
if Int(event.keyCode) == KVK_Space{
timer.invalidate()
}
}
尝试并告诉我。我不确定这是否适合您。