Obj-C中的空间压缩错误?

时间:2011-07-25 19:11:01

标签: objective-c macos

我正在为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块中。我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

似乎认识到空格键是不是这里的问题。 你投入的延迟似乎很可能被调整到很长一段时间(或负面)。

为什么你不使用NSTimer来关闭空格键的方法?你只需将bool prop(canNotReactToSpaceBar)设置为true,并且在计时器用完之后,当计时器用完时将其设置为false。使用bool你只需在bool设置为true时关闭特定方法等等。