好的,所以我正在使用LEAP Motion,如果您还未听说过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吗?

最佳答案

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

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


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

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

关于objective-c - 在每个CGEventPost之间添加中断,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14538793/

10-09 16:27