我有以下视图,其中我使用向上或向下方向的平移手势来正向或负向旋转它:
我想知道,是否有一个数学方程可以精确地将平移量转换为应该旋转的量,以便在旋转时让用户手指保持在视图上的时间是正确的?例如,如果平移平移返回为 1,旋转它的适当量是多少?
我有以下视图,其中我使用向上或向下方向的平移手势来正向或负向旋转它:
我想知道,是否有一个数学方程可以精确地将平移量转换为应该旋转的量,以便在旋转时让用户手指保持在视图上的时间是正确的?例如,如果平移平移返回为 1,旋转它的适当量是多少?
您需要提供一些细节才能给出有意义的答案:
为简单起见,我将假设视图围绕其中心旋转,并且我将使用从视图右侧开始的平移作为示例,旋转不超过 ±90°。这里有两个选项:
上下移动线性转换为旋转角度,即,给定距离的平移使视图旋转相同的量,无论平移从何处开始。在这种情况下,您需要确定平底锅的上限和下限。它们可能是超级视图的界限。无论如何,您都希望将沿 Y 方向行进的距离转换为介于 -1 和 1 之间的值,其中 -1 表示下限,1 表示上限。像 2 * (dy / superview.bounds.size.height - 0.5) 这样的东西。将其乘以 π/2(math.h 中的 M_PI_2)以从 [-1, 1] 范围缩放到 [-π/2, π/2] 范围,您就有了从手势开始时视图的旋转。
视图跟踪触摸,使其右边缘始终“指向”触摸。在这种情况下,平移并不是非常有用,因为您只需要超级视图中的触摸位置,而不是行进的距离。将 dx 和 dy 计算为从视图中心到触摸位置的 x 和 y 坐标差。然后计算 atan2(dy, dx) 并得到视图的绝对旋转角度。
我希望这能让你走上正确的道路。
答案是角度是 panAmount.y / rectangleWidth。
这是证明:https ://math.stackexchange.com/questions/322694/angle-of-rotated-line-segment