objective-c - 在 Mac OS X 应用程序中检测多点触控手势或鼠标拖动

标签 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 */
}

最佳答案

Cocoa Event Handling Guide是开始的地方

尤其是处理手势事件的部分。

他们告诉你如何处理:

  • 捏合 Action (向内或向外)是表示缩小或放大的手势 英寸(也称为放大倍数)。
  • 两根手指画相对的半圆是一种手势含义 旋转。
  • 三个手指共同刷过触控板表面 方向是滑动手势。
  • 两根手指垂直或水平移动是滚动手势。

还有更多...

特别是方法:

- (void)swipeWithEvent:(NSEvent *)event

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


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

- (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];
}

关于objective-c - 在 Mac OS X 应用程序中检测多点触控手势或鼠标拖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15604724/

相关文章:

iphone - 如何将初始 View 添加到 Storyboard 文件?

java - 无法从命令行使用 mysql 连接器运行类

java - Web 项目未在 Eclipse Mars 的 Mac OS X 服务器上运行

python - 如何使用python创建新文件

objective-c - 执行关闭 : on a borderless window?

objective-c - 从非ARC代码调用ARC方法

iphone - 有什么方法可以访问 objective c 运行时中任何类的私有(private)实例变量的地址吗?

objective-c - 如何在 NSView 的 subview 上绘制

ios - 如何通过团队管理员-应用商店上传应用

ios - 您的帐户已拥有有效的 iOS 开发证书