【问题标题】:How do I detect if a mouse / finger is moving along a certain path?如何检测鼠标/手指是否沿特定路径移动?
【发布时间】:2010-10-13 08:48:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: iphone path onmousemove


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

    享受吧!

    【讨论】:

    • 信用到期。这个想法是基于 IBM 的一篇关于字符和笔迹检测的论文,研究确定只需要几个独特的点来识别字符。因此,OCR 不会跟踪“E”,而是寻找最少的唯一位置点。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多