检测iphone上的特殊触控

时间:2009-02-12 15:58:14

标签: cocoa-touch

我问自己是否有在线示例,其中介绍了如何在触摸手势中检测形状。

例如一个矩形或一个圆圈(或更复杂的一颗心......)

或确定滑动的速度(随着时间的推移(就像我将我的iphone刷到50英里每小时))

2 个答案:

答案 0 :(得分:8)

对于非常简单的手势(水平与垂直滑动),计算两次触摸之间的x和y差异。

dy = abs(y2 - y1)
dx = abs(x2 - x1)
f = dy/dx

接近零的f是水平滑动。 f接近1是对角线滑动。而一个非常大的f是垂直滑动(请记住,dx可能为零,因此上述不会产生所有x和y的有效结果)。

如果你对速度感兴趣,毕达哥拉斯可以提供帮助。两次触摸之间的距离长度为:

l = sqrt(dx*dx + dy*dy)

如果触摸发生在时间t1和t2,则速度为:

tdiff = abs(t2 - t1)
s = l/tdiff

由您来决定您解释为快或慢的s值。

您可以将此方法扩展到更复杂的数字,例如您的方形形状可以是水平/垂直/水平/垂直滑动,其中包含前一次滑动停止的起点/终点。

对于更复杂的数字,使用理想化的形状可能更好。可以将多边形形状视为理想形状,并检查是否有一系列触摸

  1. 与pologyon轮廓上最近点的距离不太远,
  2. 所有触摸沿着多边形的轮廓沿着相同的方向。
  3. 你可以从那里进一步改进。

答案 1 :(得分:0)

确实存在用于检测触摸屏上的非简单触摸的其他方法。查看华盛顿大学的$ 1 unistroke手势识别器。 http://depts.washington.edu/aimgroup/proj/dollar/

它基本上是这样的:

  1. 将记录的路径重新采样为沿路径均匀分布的固定数量的点
  2. 旋转路径,使第一个点直接位于路径质心的右​​侧
  3. 将路径(非均匀地)缩放到固定的高度和宽度
  4. 对于每个参考路径,计算输入路径中相应点的平均距离。平均点距离最短的路径是匹配。
  5. 最棒的是步骤1-3的输出是可以添加到已知手势阵列的参考路径。这使您可以非常轻松地提供应用程序手势支持,并根据需要创建自己的一组自定义手势。

    这已由Adam Preble移植到iOS,github上的repo: http://github.com/preble/GLGestureRecognizer