如何通过手势识别器检测圆形手势?

时间:2011-01-05 03:54:29

标签: iphone ipad uigesturerecognizer

我正在尝试实现类似音量控制的圆形按钮。目前我可以通过手势识别器检测滑动。如何在按钮上检测圆形手势(顺时​​针和逆时针)?谢谢!

4 个答案:

答案 0 :(得分:15)

您是在寻找单触手势(如圆形滑块)还是双触手势(如抓住并转动现实世界的旋钮)?如果是后者,请查看UIRotationGestureRecognizer

如果是前者,你几乎就是自己。您当然可以将您的解决方案实现为您自己的自定义手势识别器:这是Apple所期望的,并且some documentation to get you started(虽然我没有看到很多工作示例)。另请参阅How to correctly subclass UIGestureRecognizer

作为一般方法,我将手势区域视为圆环形状:中心 c ,内半径 r1 和外半径的区域 R2 。当用户触摸时,您可以使用毕达哥拉斯定理计算与 c 的距离,以及与您喜欢的trig函数的角度。这样,您可以确定触摸是否在区域内。当用户拖动时,您可以根据角度更新控制值。在某些时候,他们要么触地,要么拖到区域之外,这将结束手势。我建议允许触摸在 r1 内部或 r2 之外偏离:手指是不精确的工具。

答案 1 :(得分:6)

由于没有找到解决方案,并且从@ sixten的回答中获得了逻辑灵感,我已经去创造了一些有用的东西,它不是防弹的,但它似乎做了我现在所需要的。

请任何人,分叉,克隆,使用,改进,开源,这是我的回购链接:

https://bitbucket.org/danielphillips/dpcirculargesturerecognizer

答案 2 :(得分:0)

您是否尝试过编写自己的手势识别器?文档中有详细说明。

答案 3 :(得分:0)

Best Way将实施Custom Gesture Recognizer。我不知道您是否希望检测到Discreet Gesture(一旦检测到整圆就会调用事件处理方法)或Continues Gesture(每次在圆形路径上移动手指时都会调用事件处理方法)。

可能用户可能无法画出完美的圆圈,而@Sixten Otto提供的解决方案也不错。