Пробел нажал ошибку в Obj-C? - PullRequest
2 голосов
/ 25 июля 2011

Я работаю над приложением 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. Что я тут не так делаю?

1 Ответ

0 голосов
/ 23 сентября 2011

Похоже, что распознавание клавиши пробела не является проблемой здесь.Вполне вероятно, что введенная вами задержка настроена на некоторое большое количество времени (или отрицательное значение).

Почему вы не используете NSTimer для отключения метода клавиши пробела?Вы просто устанавливаете bool prop (canNotReactToSpaceBar) в true, и после того, как таймер истекает, вы устанавливаете его обратно в false, когда таймер заканчивается.С помощью bool вы просто выключаете конкретный метод, когда bool установлен на true и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...