我正在尝试实现一个类似音量控制的圆形按钮。目前我可以通过手势识别器检测滑动手势。请问如何在按钮上检测圆形手势(顺时针和逆时针)?谢谢!
我正在尝试实现一个类似音量控制的圆形按钮。目前我可以通过手势识别器检测滑动手势。请问如何在按钮上检测圆形手势(顺时针和逆时针)?谢谢!
你是在寻找单触手势(如圆形滑块),还是双触手势(如抓住并旋转真实世界的旋钮)?如果是后者,请看看 UIRotationGestureRecognizer
。
如果是前者,你基本上要自己去解决。你可以将你的解决方案实现为你自己的自定义手势识别器:这是苹果所预期的,并且有一些文档可供参考(尽管我很少见到工作示例)。还可以查看如何正确地子类化UIGestureRecognizer。
作为一般性的方法,我认为手势的区域应该是一个甜甜圈形状:中心点为c,内半径为r1,外半径为r2的区域。当用户按下时,你可以使用勾股定理计算与c之间的距离,以及用你最喜欢的三角函数计算出角度。有了这个,你就可以确定触摸是否在区域内。当用户拖动时,你可以根据角度更新控件值。某些时候,他们会抬起手指,或者拖出区域,手势就结束了。我建议允许触摸在r1内部或r2外部偏离得相当远:手指是不精确的工具。
我无法找到解决办法,但是在受到 @sixten 回答的启发后,我创建了一些有用的东西。它不是百分之百可靠,但目前看来可以满足我的需求。
请任何人都可以 fork、clone 或使用这个开源项目,并加以改进。以下是我的代码库链接:
https://bitbucket.org/danielphillips/dpcirculargesturerecognizer
最好的方法是实现自定义手势识别器。我不知道您是否希望检测离散手势(事件处理方法将在检测到完整圆形后调用)还是连续手势(每次在圆形路径上移动手指时都会调用事件处理方法)。
可能,用户可能无法画出完美的圆形,@Sixten Otto提供的解决方案可能很好。