3

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

第一个,用图标绕圈移动制作动画的最佳方法是什么?它应该会减慢直到停止,如果用户移动手指的速度足够快,它应该能够完成一整圈以上的动作。

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

4

1 回答 1

4

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

除非您想在菜单项周围旋转手指。那是一场不一样的球赛……

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

于 2013-04-23T18:14:51.207 回答