使用UIPanGestureRecognizer旋转矩形

时间:2013-03-04 20:25:02

标签: iphone ios cocoa-touch math uiview

我有以下视图,我在向上或向下方向使用平移手势来正向或反向旋转:

enter image description here

我想知道,是否有一个数学方程式可以精确地将平移量调整到它应该旋转的量,这样时间是正确的,以便在旋转时保持用户手指在视图上?例如,如果平移转换为1,那么旋转它的适当数量是多少?

2 个答案:

答案 0 :(得分:1)

您需要提供一些细节才能给出有意义的答案:

  1. 您是在旋转关于其中心的视图(默认设置)还是有锚点?
  2. 由于视图是旋转的,当触摸在超视图中严格垂直移动时,当视图旋转得更远离定义平移的垂直线时,预期的行为是什么?
  3. 您是否有理由使用平移手势而不是旋转手势,甚至只是直接触摸追踪?似乎它产生的问题比它解决的问题还多。
  4. 为了简单起见,我将假设视图围绕其中心旋转,我将使用从视图右侧开始的平移作为示例,旋转不超过±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)并获得视图的绝对旋转角度。

    3. 我希望这会让你走上正轨。

答案 1 :(得分:0)

答案是角度为panAmount.y / rectangleWidth。

以下是证据:https://math.stackexchange.com/questions/322694/angle-of-rotated-line-segment