2

好的,所以我正在使用 LEAP Motion,如果您之前没有听说过它,它是一种发射激光的设备,通过电缆发送图像并处理该图像以产生手指、手等数量的结果. 它每毫秒左右通过帧拍摄这些数据(我认为)。

所以我正在做的是检测 Leap 上方是否有一根手指,然后我使用以下代码:

CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);

CGEventRef pressedDKeyDown = CGEventCreateKeyboardEvent(source, (CGKeyCode)0x02, YES);

CGEventRef pressedDKeyUp = CGEventCreateKeyboardEvent(source, (CGKeyCode)0x02, NO);

CGEventPost(kCGAnnotatedSessionEventTap, pressedDKeyDown);
CGEventPost(kCGAnnotatedSessionEventTap, pressedDKeyUp);

CFRelease(pressedDKeyDown);
CFRelease(pressedDKeyUp);
CFRelease(source);

它模拟了“D”键的按下,它起作用了!但是次数太多了!由于 LEAP Motion 每毫秒左右更新一次帧图像,因此 D 键被按下了太多次。我想在每次点击之间添加一个休息时间,最好在每个预定事件之间添加大约 0.5 秒。

有什么办法可以做到这一点?我应该设置一个NSTimer吗?

4

2 回答 2

0

为什么不只记录您发布密钥的时间。当以后的事件到达时,检查当前时间与最后一次发布密钥的时间。如果时间不够用,则忽略当前事件。

于 2013-02-09T20:37:07.740 回答
0

您可以从在 Leap 上方检测到一根手指时调用的方法中调用第二种方法:

[self performSelector:@selector(pressDKey) withObject:nil afterDelay:0.5];

调用第二种方法pressDKey,然后将发布按键事件的代码放入其中。不要忘记将以下内容也放入pressDKey方法中:

[self cancelPreviousPerformRequestsWithTarget:self selector:@selector(pressDKey) object:nil];
于 2013-02-09T15:59:22.500 回答