Я работаю над приложением Obj-C для OSX, в котором пользователь нажимает пробел (или возвращает), чтобы вызвать функцию. Однако иногда после того, как пользователь нажимает пробел пару раз, программа думает, что пользователь все еще нажимает пробел, таким образом, она вызывает функцию тысячи раз до сбоя. Я установил задержку, чтобы пробел можно было нажимать только раз в 2 секунды, однако это только замедляет сбой. Единственный способ остановить аварию - это снова нажать пробел.
Как я могу решить эту проблему?
int key = ([[incomingEvent charactersIgnoringModifiers] UTF8String])[0];
key = [incomingEvent keyCode];
switch(key)
{
// return and space
case 36:
case 49:
if (CFAbsoluteTimeGetCurrent() - lastSpaceTime > acceptableTimeBetweenSpace)
{
// do stuff
printf("space pressed");
// lastSpaceTime is now
lastSpaceTime = CFAbsoluteTimeGetCurrent();
}
else
{
printf("not enough time since last space!");
// break;
// return incomingEvent;
}
break;
case 53:
//do stuff
break;
}
Я пытался добавить это:
CGEventRef simulateSpaceUp, simulateSpaceDown;
simulateSpaceDown = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)49, true);
simulateSpaceUp = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)49, false);
в блоке else. Что я тут не так делаю?