2009-02-12 96 views
3

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

例如矩形或圆形(或更复杂心脏..)

或确定刷卡(一段时间(像我刷我对50英里每小时iphone))

回答

8

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

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

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

如果你对速度感兴趣,pythagoras可以提供帮助。两次触摸之间的行驶距离的长度为:

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

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

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

它是由你来决定S的哪个值你解释为快或慢。

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

对于更复杂的图形,最好使用理想形状。一个可以考虑的多边形形状的理想,并检查了一系列触摸

  1. 不必对pologyon的轮廓与其最接近的点太高的距离,
  2. 全触控遵循相同的方向沿着多边形的轮廓。

您可以从那里进一步修改。

+0

正确,有没有这样的库内置到苹果iPhone API。但是,这样的发展对于回馈社区会很好。检测形状是一件复杂的事情。 – Nolte 2009-02-12 19:58:15

0

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

它基本上是这样工作的:

  1. 重新取样所记录的路径到固定点的数量被均匀地沿路径
  2. 旋转的路径间隔开,使得所述第一点是直接连接到右的路径中心
  3. 将路径(非均匀)缩放到固定的高度和宽度
  4. 对于每个参考路径,计算输入路径中相应点的平均距离。具有最低平均点距离的路径是匹配。

最棒的是步骤1-3的输出是一个可以添加到已知手势阵列的参考路径。如果您认为合适,这可以非常轻松地提供应用程序手势支持并创建自己的一组自定义手势。

这已经被亚当·普雷布尔,在github上回购移植到iOS: http://github.com/preble/GLGestureRecognizer