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