在每个CGEventPost之间添加中断

时间:2013-01-26 16:14:40

标签: objective-c macos cocoa events

好的,所以我正在使用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吗?

2 个答案:

答案 0 :(得分:0)

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

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

第二种方法称为pressDKey,您可以将代码放在那里发布按键事件。不要忘记在pressDKey方法中添加以下内容:

[self cancelPreviousPerformRequestsWithTarget:self selector:@selector(pressDKey) object:nil];

答案 1 :(得分:0)

为什么不在发布密钥时进行记录。当后来的事件到来时,请根据最后一次发布的时间检查当前时间。如果时间不够,只需忽略当前事件。