如何使用UIGestureRecognizer检测圆周运动

时间:2011-04-30 13:35:12

标签: iphone objective-c ios uigesturerecognizer

我希望能够检测到某人的手指在屏幕上绘制圆周运动 - 好像他们正在绘制一个'O'。这可以用UIGestureRecognizer吗?

6 个答案:

答案 0 :(得分:4)

我认为答案取决于你对圆周运动的定义以及你打算如何使用它。例如,您想知道用户手指沿着圆圈走过多少度?或者,你只关心一个完成的圆圈吗?您需要的准确度是多少?您是否希望允许动作被中断,或者这是否需要更多的触及>绘制圆圈>修饰(换句话说,单动)?

一种方法是沿圆周定义一堆矩形区域,并检测用户是否按顺序接触这些区域。这可以为您提供方向和粗略的角度指示。

另一种方法是在触地和触摸之间存储点,并进行一些过滤和曲线拟合,以确定点近似的形状。首先使用基本FIR滤波器的低通滤波器,然后从点到点查看dx和dy。圆(作为一系列圆弧)必须在点到点的某个斜率变化范围内,否则你会有其他形状。

另一种方法是使用神经网络来获取点并告诉你形状是什么样的。

答案 1 :(得分:2)

我认为这可能是你需要的

How to detect circular gesture via Gesture Recognizer?

答案 2 :(得分:1)

使用手势识别器,this project会对跟踪UITouch事件角度的圆周运动做出反应。

答案 3 :(得分:1)

我对我的问题的回答:

我用过这个:http://iphonedevelopment.blogspot.com/2009/04/detecting-circle-gesture.html

..但将CircleView转换为自定义UIGestureRecognizer。一切都很可爱。

答案 4 :(得分:0)

不,它本身不能识别圆周运动。 你必须实现自己的方法来做到这一点。

答案 5 :(得分:0)

以下是我需要使用视图控制器中的触摸回调来完成它,但这也可以做成一个手势。注意,我试图检测多个圆圈运动(在触摸事件期间产生2个或更多顺时针或逆时针圆圈。

  1. 将touchesMoved CGPoints存储在数组中。
  2. 创建历史数组中所有点的最小/最大矩形。
  3. 将此最小/最大矩形分为4个较小的行。
  4. 为每个4个象限使用CGRectContainsPoint()为每个历史记录点分配一个象限
  5. 顺时针运动将使象限上升。逆时针运动将使象限下降。
  6. 如果要检测圆圈与椭圆
  7. ,请检查宽度/高度的比例