私は関数を呼び出すためにスペース(またはリターン)を押すOSX用のObj-Cアプリを開発中です。しかし、ユーザがスペースバーを数回押した後に、ユーザがまだスペースを押しているとプログラムが考えると、クラッシュするまで何千回も関数を呼び出すことがあります。私はスペースを2秒に1回しか押すことができないので、クラッシュを遅くするために遅れを入れました。クラッシュを止める唯一の方法は、ユーザーがスペースをもう一度押すことです。Obj-Cのスペースが押されたバグ?
どうすれば解決できますか?
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);
を。私はここで間違って何をしていますか?
なぜ 'key'をそのように2回割り当てていますか? –
ああ、私が切り出したこれらの前の大した事件は、最初のキーラインはずっと早いものです。明快さの欠如のため申し訳ありません:) – Sciguy77
問題がこれらの行にあるとどのように判断したのかを説明できますか?あなたが切り取ったビットにはないと確信していますか? –