2010-07-06 58 views
2

我正在寻找在iPhone/iPad应用程序中创建一个滚轮。我知道你可以继承UIGestureRecognizer来编写你自己的识别器。有人知道如何创建一个可以检测到圆形运动的运动(可能与平底运动相结合)?Write a Circular UIGestureRecognizer

谢谢

回答

5

这个问题并不容易。我花了一些时间,可能的解决方案的思考:
我想你需要的是一些关键的属性,你必须设置:

  • 圆形运动的中心(在这种情况下没有问题,因为你知道中心的转轮)
  • 运动应该发生的走廊。
    • 所以你需要内半径和外半径。

现在你有这样的事情(不幸的是我没有足够的声誉因此只有链接:http://img17.imageshack.us/img17/4416/bildschirmfoto20100721u.png

现在这背后的数学开始:
首先你安排走廊在四分之四:

  • 从0°到90°
  • 从90°到180°
  • 从180°到270°
  • 从270°到360°

对于你必须弄清楚当手指移动每个季度(让我们说,在0°线是从中心点直到顶部):

  • 如果手指处于第一个季度,则知道x是否更改为左侧旋转必须是逆时针。如果x向右移动,则旋转必须是顺时针方向。

将这个逻辑应用于所有宿舍。现在您知道了转轮是顺时针还是逆时针移动的。您必须确保手指永远不会离开走廊(如果您测试了这一逻辑并且因为走出走廊而停止移动,请使走廊更大 - 感谢CrystalSkull的评论:使用44px作为最小宽度走廊适用于人机界面指南)。

Sumary
所以现在你可以断定你需要一个中心点和走廊的手指可以动。 你必须找出其中四分之一的手指是找出(使用X-值),如果旋转是顺时针或逆时针。

我希望这可以帮助你一点点。

+0

我可以确定顺时针/逆时针方向,但我如何计算出手指所在的四分之一?我目前有一个自定义的UIButton,并添加了一个圆形图像... – joec 2010-07-28 15:32:11

+0

嗨, 你可以通过找出手指在哪里得到季度(在UIView中有一个方法:touchesMoved:withEvent :)。所以现在你有手指的x和y位置。现在,如果y大于中心点的y,则您知道手指位于轮子的上方,因此在第一个或最后一个季度(假设第一个手指从右上角开始并顺时针转动)。通过使用手指的x位置,你可以发现它是不是左边还是右边。 你的转轮的中心是你必须提供的重要信息。 – 2010-07-29 07:00:00

+0

如果我能在这里发出响亮的声音,那么根据HIG使走廊的宽度至少为44px可能是有意义的。 – 2010-10-29 04:23:01