在Mac OS X App中使用鼠标检测多点触控手势或拖动

时间:2013-03-24 22:18:01

标签: objective-c xcode macos multi-touch gesture

如何在Xcode中制作的Mac OSX应用程序中检测拖动发生的时间或者在履带板或魔术鼠标上的滑动。

通过拖动,我的意思是用户点击了窗口的左边缘或右边缘,鼠标被按住,现在水平移开窗口的那一侧。

我正在尝试在左拖动或右滑动(在魔术鼠标或触控板上)上运行代码,在右拖动或左滑动(在魔术鼠标或触控板上)上运行另一组代码。

以下是我所说的手势的一些定义:

左侧拖动是指单击并保持窗口右侧并且光标向左移动。

右键拖动是指单击并保持窗口左侧并且光标向右移动。

顶部拖动是指拖动窗口上方,交通信号灯所在的框架下方。

顶部滑动是从触控板或魔术鼠标顶部开始滑动并向下滑动。

在伪代码中我想要实现的是:

if( right-drag || left-swipe ){
    /*run code*/
}
else if( left-drag || right-swipe ){
    /* run different code */
}
else if( top-drag || top-swipe ){
    /* run other code */
}
else{
   /* do nothing */
}

1 个答案:

答案 0 :(得分:2)

Cocoa Event Handling Guide是开始的地方

特别是关于处理手势事件的部分。

他们会告诉您如何处理:

  • 捏合动作(进或出)是手势,意味着缩小或缩放 in(也称放大)。
  • 两个手指以相反的半圆形移动是一种手势的意思 旋转。
  • 三根手指在一个共同的触控板表面上刷 方向是一种轻扫手势。
  • 两根手指垂直或水平移动是一种滚动手势。

以及更多......

特别是方法:

- (void)swipeWithEvent:(NSEvent *)event
来自NSResponder的

是您最好的选择。 T *他的事件通知接收者用户已经开始轻扫手势。该事件将在关键窗口中触摸下发送到视图。*


取自同一个文档,下面是一个关于如何处理滑动手势的示例:

- (void)swipeWithEvent:(NSEvent *)event {
    CGFloat x = [event deltaX];
    CGFloat y = [event deltaY];
    if (x != 0) {
        swipeColorValue = (x > 0)  ? SwipeLeftGreen : SwipeRightBlue;
    }
    if (y != 0) {
        swipeColorValue = (y > 0)  ? SwipeUpRed : SwipeDownYellow;
    }
    NSString *direction;
    switch (swipeColorValue) {
        case SwipeLeftGreen:
            direction = @"left";
            break;
        case SwipeRightBlue:
            direction = @"right";
            break;
        case SwipeUpRed:
            direction = @"up";
            break;
        case SwipeDownYellow:
        default:
            direction = @"down";
            break;
    }
    [resultsField setStringValue:[NSString stringWithFormat:@"Swipe %@", direction]];
    [self setNeedsDisplay:YES];
}