假设您正在谈论这个手势:
来源。
构建单点触控旋转手势识别器。正确构建手势识别器后,您只需查看旋转并了解如何使用旋转垫。
在构建单点触控旋转手势识别器时,您需要考虑几件事。如果您查看UIRotationGestureRecognizer
,它使用两个手指支持的两次触摸之间的连接来得出当前角度,然后将该角度与从较早的触摸更改事件得出的前一个角度进行比较,以查看增量。
测量当前角度
形成一条线需要两个点,并且您需要一条线来知道角度。如果您只使用一次触摸,则需要一个锚点。有很多方法可以将锚点发送到手势识别器,并且由于您可能要构建自定义类,请使用委托。
累积旋转计数
如果您只是在触摸更改期间记下角度并发送消息,它有时会起作用。但是,如果您想实现滞后(例如,这个旋转刻度盘只会顺时针旋转一次,然后它会收紧),您需要累积顺时针和逆时针方向的旋转计数。
幸运的是,您可以假设 a) 触摸事件不会太频繁地丢弃,并且 b) 只需将当前角度与过去角度进行比较,看看它们是否跨越象限边界就足够了。
例如:
- 如果触摸从左上象限移动到右上象限,则将旋转计数加一。
- 如果触摸从右上象限移动到左上象限,则从旋转计数中减去 1。
(是的,这确实有效。)
发出正确的累积旋转
如果你想像以前一样发出旋转信息UIRotationGestureRecognizer
,你将跟踪四件事。
- 起始角度:从锚点到起始触摸的连接与从锚点到固定参考点的连接之间的角度。
- 当前角度:从锚点到当前触摸的连接与从锚点到固定参考点的连接之间的角度。
- Rotation Count:顺时针旋转的次数,通过不断比较当前角度的当前值与其上一个值(如上一节所述)得出。如果触摸逆时针移动,则该计数将变为负数。
您将提供Rotation Count * 2_PI + (Current Angle - Starting Angle)
轮换。