在iPhone上检测特殊触摸

3

我在想是否有在线示例,涵盖了如何检测触摸手势中的形状。

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

或确定滑动速度(随时间变化(就像我用iPhone以50mph滑动))

2个回答

8

对于非常简单的手势(水平 vs. 垂直滑动),计算两个触摸之间的 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. 与多边形轮廓线上的最近点距离不太大,
  2. 所有触摸都沿着多边形轮廓线相同的方向移动。

您可以从那里进一步完善。


正确的,苹果iPhone API中没有这样的内置库。然而,为社区做出这样的开发将是非常有益的。检测形状是一件复杂的事情。 - Nolte
哎呀,我真想要一个形状检测库...但正如你所说,这很复杂,因此需要时间,而时间是我最缺乏的东西。 - unwesen

0

在触摸屏上检测非简单的触控操作还存在其他方法。可以查看华盛顿大学的$1单笔手势识别器。

http://depts.washington.edu/aimgroup/proj/dollar/

工作原理如下:

  1. 将记录的路径重新采样为一定数量的点,并沿路径均匀分布
  2. 旋转路径,使得第一个点直接位于路径重心右侧
  3. 将路径(不均匀地)缩放到固定的高度和宽度
  4. 对于每条参考路径,计算输入路径中相应点的平均距离。具有最低平均点距离的路径是匹配路径。

棒极了的是,步骤1-3的输出是可添加到已知手势数组中的参考路径。这使得轻松为您的应用程序提供手势支持并创建自己的自定义手势集变得非常容易。

Adam Preble已将其移植到iOS中,存储库在github上: http://github.com/preble/GLGestureRecognizer


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接