有没有办法在Mac OS X上触发手势事件?

时间:2010-03-21 14:03:56

标签: macos events multi-touch gesture

我想在Mac OS X上触发多点触控手势事件。有没有办法做到这一点?可以使用CGEventCreateMouseEvent和CGEventCreateKeyboardEvent触发鼠标或键盘事件。多点触控事件是否有类似的低级功能?

韩城


您的建议无效。我试过这段代码:

- (void)rotateWithEvent:(NSEvent *)event {
    NSLog(@"ROTATE");
}
-(IBAction)button:(id)sender {
    CGEventSourceRef eventSource = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
    CGEventRef event = CGEventCreate(eventSource);
    CGEventSetType(event, NSEventTypeRotate);
    CGEventPost(kCGHIDEventTap, event);
    NSLog(@"POST EVENT");
}

但函数rotateWithEvent永远不会被调用。我做错了吗?

2 个答案:

答案 0 :(得分:2)

您可以使用CGEventCreate来创建手势事件。为CGEventCreate定义的“官方”事件类型不包含手势事件类型,但您可以传入NSEvent.h中定义的值:

NSEventTypeGesture
NSEventTypeMagnify
NSEventTypeSwipe
NSEventTypeRotate
NSEventTypeBeginGesture
NSEventTypeEndGesture

非手势类型的值似乎直接映射到kCGEvent<TYPE>中的CGEventTypes.h值,因此期望手势事件类型可行是合理的:

CGEventSourceRef eventSource = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
CGEventRef event = CGEventCreate(eventSource);
CGEventSetType(event, NSEventTypeMagnify);
//continue to set up the event

答案 1 :(得分:0)

我想知道你是否尝试在发布旋转事件之前发布NSEventTypeBeginGesture?