如何使用UIGestureRecognizer检测圆形运动

4

我希望能够检测到某人在屏幕上画圆形运动的手指 - 就好像他们在画一个“O”一样。使用UIGestureRecognizer可以实现这个功能吗?

6个回答

4
我认为答案取决于您对圆周运动的定义以及您打算如何使用它。例如,您想知道用户手指沿圆形移动了多少度吗?或者,您只关心完成一个圆形吗?您需要什么样的精度?您是否允许中断运动,还是必须更像触摸 - 绘制圆形 - 触摸(换句话说,单一运动)?
一种方法是沿着圆周定义一堆矩形区域,并检测用户是否按顺序触摸这些区域。这可以为您提供方向和角度的粗略指示。
另一种方法是存储触摸下降和触摸上升之间的点,并进行一些过滤和曲线拟合,以确定点所近似的形状。首先使用基本FIR滤波器进行低通滤波,然后查看从点到点的dx和dy。圆(作为一系列弧)必须在某个斜率变化范围内,否则您将得到其他形状。
另一种方法是使用神经网络获取点并告诉您形状是什么。

2

1

与使用手势识别器不同,this project 对跟踪 UITouch 事件的角度进行圆形运动反应。


1

0

不,它本身无法识别循环运动。你需要自己实现方法来完成它。


0

这是我在我的视图控制器中使用触摸回调来实现的方式,但也可以将其变为手势。请注意,我尝试检测多个圆形动作(在触摸事件期间进行的2个或更多顺时针或逆时针圆)。

  1. 将touchesMoved CGPoints存储在数组中。
  2. 创建一个包含历史数组中所有点的最小/最大矩形。
  3. 将此最小/最大矩形分成4个较小的矩形。
  4. 使用CGRectContainsPoint()为每个四分之一指定一个象限。
  5. 顺时针运动将具有升序排列的象限。逆时针运动将具有降序排列的象限。
  6. 如果要检测圆形与椭圆形,请检查宽度/高度的比率。

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