如何制作一个菜单,其中图标在一个圆环中旋转?

3
我正试图为我的应用程序创建一个带有几个圆形图标的菜单。用户可以旋转此菜单,使图标在该圆形路径周围改变其位置,但不旋转它们自身。我之前阅读过此篇文章,以了解如何跟随手指移动,但是我需要这个菜单在触摸结束后具有惯性旋转。 我有两个关于如何实现这一点的问题。
首先,最好的方法是什么,让图标在圆圈中移动并做动画效果?它应该慢慢减速直到停止,并且如果用户移动手指足够快,则应能够执行多个完整的圆圈。
其次,我如何测量手指在结束时的运动速度?我尝试使用locationInView和previousLocationInView,只需将它们之间的角度差乘以某个常数即可进行旋转。问题是,当我把手指放在一个地方一段时间并抬起它时,我仍然会得到圆圈的惯性运动,在这种情况下,我根本不想让它移动。
1个回答

4
你想使用一个滚动视图。具体来说,你想要一个隐藏的滚动视图,在其中将滚动视图的平移手势识别器附加到你的自定义菜单视图上。然后,你实现滚动视图的委托方法以重新绘制你的菜单。这个WWDC视频对这个过程有很好的概述。 这种方法的好处是,你可以免费获得真正的iOS样式加速和减速。你不需要担心手指位置或速度,只需要关注滚动视图的内容偏移量。

除非你想用手指在菜单项中转圈。那是另一回事了...

理论上,可以使用与上述相同的方法来旋转手指。您需要确保在滚动视图上将directionalLockEnabled设置为NO。问题是确定菜单视图旋转的计算要复杂得多。可能您希望模态,并检查回调中滚动视图是否处于dragging状态。如果正在拖动,则会使用平移手势上的触摸来找到精确的手指位置以设置旋转。您还需要维护有关手指运动瞬时方向的数据,以便在释放触摸时使用...如果它没有被拖动,那么您将使用滚动视图内容偏移量来应用旋转上的减速效果(使用触摸释放前的滚动方向来了解如何使用内容偏移量变化)。

是的,那正是我想要做的。 - johnyu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接