我正在为OSX开发一个Obj-C应用程序,用户可以在其中按空格(或返回)来调用函数。然而,有时在用户按下空格键几次后,程序认为用户仍在按空间,因此它会调用该函数数千次直到崩溃。我已经延迟了,因此只能每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);
<\ n>在else块中。我在这里做错了什么?
答案 0 :(得分:0)
似乎认识到空格键是不是这里的问题。 你投入的延迟似乎很可能被调整到很长一段时间(或负面)。
为什么你不使用NSTimer来关闭空格键的方法?你只需将bool prop(canNotReactToSpaceBar)设置为true,并且在计时器用完之后,当计时器用完时将其设置为false。使用bool你只需在bool设置为true时关闭特定方法等等。