Как постоянно проверять, нажата ли клавиша, прежде чем продолжить? - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь постоянно проверять, нажата ли клавиша или нет. Как только это произойдет, я хочу запустить блок кода. Вот как я пытаюсь реализовать это сейчас:

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 (я предполагаю, что он застрял в бесконечном цикле). Это даже правильный путь решения проблемы?

1 Ответ

0 голосов
/ 23 марта 2019

Похоже, что ваш "Основной поток" постоянно выполняет ваш цикл, поэтому не может выполнять другие инструкции.

Таким образом, вы можете вызывать свою функцию, когда ваш пробел находится в нажатом положении.

Примерно так:

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()
         }
 }

Попробуй и скажи мне. Я не уверен, что это работает для вас.

...