我正在为 iPhone 开发一个应用程序,我想检测用户何时沿着特定路径移动手指。
具体来说,我想检测用户何时沿着特定的圆形路径移动手指。
这可能很容易通过检测沿路径的鼠标运动来适应。
我正在为 iPhone 开发一个应用程序,我想检测用户何时沿着特定路径移动手指。
具体来说,我想检测用户何时沿着特定的圆形路径移动手指。
这可能很容易通过检测沿路径的鼠标运动来适应。
似乎一个特定的案例可以相当简单地实现。将输入区域划分为四个象限,并通过每个象限跟踪位置。象限的顺序决定了它们是否已经完成或绕了一圈。
描述这个想法的伪代码:
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 方法中制作更多区域来提高准确性。主要思想是根据区域序列进行思考,以便在没有过多复杂性的情况下实现所需的行为(如贝塞尔曲线检测或类似的废话)。这个伪代码肯定是野蛮的,我相信有一个很好的方法来完善实现。我一直在为我正在从事的项目考虑“圆周运动检测”,这是我想出的粗略想法。
享受!
由于我不熟悉 iPhone SDK 本身,我不确定是否有用于捕获非标准手势的内置设施。但是,这是您可以执行此操作的手动方法之一。
本教程适用于 Flash,但它的操作原理相同。每个方向代表一个数字。使用指点设备跟踪一个圆圈将生成一系列数字,代表随着时间或距离行进的方向,这取决于您。将该数字序列与表示圆圈的预定义序列进行比较。如果它们匹配,则触发一个事件。
有很多教程解释了如何制作像这样“模糊”的手势,这样就需要不太精确的点运动。