Iphone 如何制作图标旋转成圆形的菜单?

Iphone 如何制作图标旋转成圆形的菜单?,iphone,ios,uikit,caanimation,Iphone,Ios,Uikit,Caanimation,我正在尝试为我的应用程序创建一个带有圆圈中几个图标的菜单。用户应该能够旋转此菜单,使图标围绕此圆路径改变其位置,但不会自行旋转。我之前读过这篇文章,所以我可以看到如何跟随手指的运动,但我需要这个菜单在触摸结束后进行惯性旋转。关于如何做到这一点,我有两个问题 首先,制作图标在圆圈中移动的动画的最佳方法是什么?它应该减速,直到停止,如果用户移动手指足够快,应该能够做一个以上的完整循环 第二,我如何在结束时测量手指运动的速度?我试着使用locationInView和previousLocationIn

我正在尝试为我的应用程序创建一个带有圆圈中几个图标的菜单。用户应该能够旋转此菜单,使图标围绕此圆路径改变其位置,但不会自行旋转。我之前读过这篇文章,所以我可以看到如何跟随手指的运动,但我需要这个菜单在触摸结束后进行惯性旋转。关于如何做到这一点,我有两个问题

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


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

您想使用滚动视图。具体来说,您需要一个隐藏的滚动视图,将平移手势识别器从滚动视图连接到自定义菜单视图。然后实现滚动视图的委托方法来重新绘制菜单。这种方法的好处是,您可以免费获得真正的iOS风格的加速和减速。您不需要担心手指的位置或速度,只需担心滚动视图的内容偏移量

除非你想用手指绕着菜单项转一圈。那是一场不同的球赛


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

是的,这正是我想要做的。