2

在使用 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 */
}
4

1 回答 1

2

Cocoa 事件处理指南是开始的地方

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

他们告诉你如何处理:

  • 捏合动作(向内或向外)是表示缩小或放大(也称为放大)的手势。
  • 两个手指在相对的半圆中移动是一种手势,意思是旋转。
  • 三根手指在一个共同的方向上刷过触控板表面是一种轻扫手势。
  • 垂直或水平移动的两个手指是滚动手势。

和更多...

特别是方法:

- (void)swipeWithEvent:(NSEvent *)event

NSResponder 是您最好的选择。T*his 事件通知接收器用户已经开始滑动手势。该事件将被发送到按键窗口中触摸下的视图。*


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

- (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];
}
于 2013-03-24T22:45:28.830 回答