如何制作带有图标旋转的菜单?

时间:2013-04-23 14:18:12

标签: iphone ios uikit caanimation

我正在尝试使用圆圈中的几个图标为我的应用创建一个菜单。用户应该能够旋转此菜单,使图标更改其围绕此圆圈路径的位置,但不能自行旋转。我之前读过这个http://www.raywenderlich.com/9864/how-to-create-a-rotating-wheel-control-with-uikit所以我可以看到如何跟随手指运动,但我需要这个菜单在触摸结束后进行惯性旋转。我有2个关于如何做到这一点的问题。

首先,用图标在圆圈中移动制作动画的最佳方法是什么?它应该减速直到它停止,并且如果用户足够快地移动他的手指,应该能够做多个完整的圆圈。

其次,如何测量手指移动速度?我尝试使用locationInView和previousLocationInView,然后通过它们之间的角度差乘以某个常数来旋转它。问题是,当我将手指放在一个地方一段时间并把它拿起来时,我仍然会得到圆圈的惯性运动,在这种情况下我根本不想让它移动。

1 个答案:

答案 0 :(得分:4)

您想使用滚动视图。具体来说,您需要一个隐藏的滚动视图,您可以在其中将平移手势识别器从滚动视图附加到自定义菜单视图。然后,您实现滚动视图的委托方法以重绘您的菜单。 This WWDC video has a good overview of the process.这种方法的好处是你可以免费获得真正的iOS风格加速和减速。您无需担心手指位置或速度,只需要担心滚动视图的内容偏移。

除非你想用菜单项围绕一个圆圈旋转你的手指。这是一场不同的球赛......

理论上,可以使用与上述相同的方法将手指旋转成圆圈。您需要确保滚动视图上的directionalLockEnabled设置为NO。问题是确定菜单视图旋转的计算要复杂得多。可能你想要模态并检查回调中的滚动视图是否为dragging。如果是拖动,您将使用平移手势上的触摸来找到设置旋转的确切手指位置。您还需要保持手指移动的瞬时方向数据,以便在触摸释放时...如果没有拖动,则使用滚动视图内容偏移量对旋转应用减速效果(使用在触摸发布之前滚动方向以了解如何使用内容偏移更改。)