如何检测鼠标/手指是否沿某条路径移动?

时间:2009-03-14 16:00:58

标签: iphone path onmousemove

我正在为iPhone开发一个应用程序,我想检测用户何时沿着某条路径移动他的手指。

具体来说,我想检测用户何时沿特定的圆形路径移动手指。

这可能很容易通过沿着路径检测鼠标运动来改编。

2 个答案:

答案 0 :(得分:1)

看起来像一个特定的案例可以相当简单地实现。将输入区域分成四个象限,并通过每个象限跟踪位置。 quandrants序列决定他们是否已经完成或走了一圈。

用于描述这个想法的伪代码:

static touchKeeper; //touch, quadrant
static touchIndex=0;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
   UITouch *touch = [[allTouches allObjects] objectAtIndex:0];
   touchKeeper[touchIndex].touch =  touch;
   touchKepper[touchIndex].quadrant = DetectQuadrant(touch));
   if (touchIndex > 3 && (touchKeeper[3].quadrant == touchKeeper[2].quadrant+1 == touchKeeper[1].quadrant+2 == touchKeeper[0].quadrant+3)) {
     [self doCircleAction];
     touchIndex=0;
   } 
     else touchIndex++;
 }

这个想法是你只需粗略地识别某个区域的特定触摸。象限例程就是这样的:

int DetectQuadrant(UITouch *touch) {
 CGPoint point;
 point = [touch locationInView:self];
 if (endPoint.x > X1 && endPoint.x < X2 && endPoint.Y > Y1 && endPoint.Y < Y2)
  return QUAD1;
 } else etc

我使用象限作为一个例子 - 显然你可以画一个正方形并想'圈!'。通过在Detect方法中创建更多区域来提高准确性。主要思想是根据区域序列进行思考,以实现期望的行为,而不会出现过度复杂化(如贝塞尔曲线检测或类似的无意义)。这个伪代码肯定是野蛮的,我确信这是一种很好的方法来精确实现。对于我正在研究的项目,我一直在考虑'圆周运动检测',这是我提出的粗略想法。

享受!

答案 1 :(得分:0)

由于我不熟悉iPhone SDK本身,我不确定是否有用于捕获非标准手势的内置工具。但是,这是您可以使用的手动方式之一。

This tutorial适用于Flash,但它采用相同的手势原则。每个方向代表一个数字。使用指点设备跟踪圆圈将生成一系列数字,表示随时间或远距离行进的方向,由您决定。将该序列号与表示圆的预定义序列进行比较。如果匹配,则发起一场比赛。

有很多教程可以解释如何制作像“模糊”这样的手势,这样就不需要精确的点运动了。