我有以下视图,我在向上或向下方向使用平移手势来正向或反向旋转:
我想知道,是否有一个数学方程式可以精确地将平移量调整到它应该旋转的量,这样时间是正确的,以便在旋转时保持用户手指在视图上?例如,如果平移转换为1,那么旋转它的适当数量是多少?
答案 0 :(得分: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)并获得视图的绝对旋转角度。
我希望这会让你走上正轨。
答案 1 :(得分:0)
答案是角度为panAmount.y / rectangleWidth。
以下是证据:https://math.stackexchange.com/questions/322694/angle-of-rotated-line-segment