如何检测在 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/