2013-03-04 161 views
0

我有以下视图,其中我使用在向上平移姿势或向下的方向,以正或负旋转它一个矩形:旋转使用UIPanGestureRecognizer

enter image description here

我想知道,是有一个数学公式可以准确地转换旋转的数量,因此时间是正确的,以便让用户在旋转时将手指放在视图上?例如,如果平移翻译回到1,旋转它的适当数量是多少?

回答

1

有您需要提供给一个有意义的答案几个细节:

  1. 你旋转视图围绕其中心(默认),或者是有一个锚点?
  2. 由于视图是旋转的,当触摸在超视图中严格垂直移动时,随着视图旋转远离定义泛的垂直线,预期的行为是什么?
  3. 您是否有使用平移手势而不是旋转手势的原因,或者甚至只是直接触摸跟踪?它似乎创造了比解决问题更多的问题。

为了简单起见,我将假定视图是围绕其中心旋转的,我将使用从视图右侧开始的平移作为示例,旋转不超过± 90°。这里有两个选项:

  1. 运动向上和向下线性地转换为旋转角度,即,一个给定的距离的盘旋转视图相同的量,无论在哪里锅启动。在这种情况下,您需要确定平底锅的顶部和底部极限。他们可能是超级观点的界限。无论如何,您要将沿Y方向行进的距离转换为介于-1和1之间的值,其中-1表示下限,1表示上限。像2 *(dy/superview.bounds.size.height - 0.5)。将其乘以π/ 2(math.h中的M_PI_2)以从[-1,1]范围缩放至[-π/ 2,π/ 2]范围,并且您已经获得了从视图在手势开始处的旋转。

  2. 视图追踪触摸,以便其右边始终“指向”触摸。在这种情况下,平移不是非常有用,因为你只需要在超视图中的触摸位置,而不是行驶的距离。计算dx和dy作为从视图中心到触摸位置的x和y坐标的差异。然后计算atan2(dy,dx),并获得视图的绝对旋转角度。

我希望这会让你走上正确的轨道。

+0

谢谢。需要一点时间来消化! – 2013-03-05 02:43:32