好的,我使用的是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
发布于 2013-02-09 23:59:23
您可以从检测到Leap上方的一个手指时调用的方法中调用第二个方法:
[self performSelector:@selector(pressDKey) withObject:nil afterDelay:0.5];第二个方法称为pressDKey,您可以将发布按键事件的代码放在其中。不要忘了在pressDKey方法中也放入以下内容:
[self cancelPreviousPerformRequestsWithTarget:self selector:@selector(pressDKey) object:nil];发布于 2013-02-10 04:37:08
为什么不在你发布密钥的时候记录下来。当后续事件到达时,检查当前时间与上一次发布密钥的时间。如果没有足够的时间,只需忽略当前事件。
https://stackoverflow.com/questions/14538793
复制相似问题