0

我有以下视图,其中我使用向上或向下方向的平移手势来正向或负向旋转它:

在此处输入图像描述

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

4

2 回答 2

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) 并得到视图的绝对旋转角度。

我希望这能让你走上正确的道路。

于 2013-03-05T01:40:45.463 回答
0

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

这是证明:https ://math.stackexchange.com/questions/322694/angle-of-rotated-line-segment

于 2013-03-06T19:11:52.650 回答