1

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

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

这可能很容易通过检测沿路径的鼠标运动来适应。

4

2 回答 2

1

似乎一个特定的案例可以相当简单地实现。将输入区域划分为四个象限,并通过每个象限跟踪位置。象限的顺序决定了它们是否已经完成或绕了一圈。

描述这个想法的伪代码:

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 方法中制作更多区域来提高准确性。主要思想是根据区域序列进行思考,以便在没有过多复杂性的情况下实现所需的行为(如贝塞尔曲线检测或类似的废话)。这个伪代码肯定是野蛮的,我相信有一个很好的方法来完善实现。我一直在为我正在从事的项目考虑“圆周运动检测”,这是我想出的粗略想法。

享受!

于 2009-03-14T18:04:32.370 回答
0

由于我不熟悉 iPhone SDK 本身,我不确定是否有用于捕获非标准手势的内置设施。但是,这是您可以执行此操作的手动方法之一。

本教程适用于 Flash,但它的操作原理相同。每个方向代表一个数字。使用指点设备跟踪一个圆圈将生成一系列数字,代表随着时间或距离行进的方向,这取决于您。将该数字序列与表示圆圈的预定义序列进行比较。如果它们匹配,则触发一个事件。

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

于 2009-03-14T16:14:32.353 回答