Iphone 使用UIPangestureRecognitor旋转矩形

Iphone 使用UIPangestureRecognitor旋转矩形,iphone,ios,cocoa-touch,math,uiview,Iphone,Ios,Cocoa Touch,Math,Uiview,我有以下视图,其中我使用向上或向下的平移手势来正向或反向旋转它: 我想知道,是否有一个数学公式可以精确地将平移的量转换为它应该旋转的量,这样在视图旋转时,用户的手指就可以保持在视图上了?例如,如果平移平移返回为1,则旋转平移的正确量是多少 要给出有意义的答案,您需要提供一些细节: 您是围绕视图的中心(默认)旋转视图,还是存在锚定点 由于视图正在旋转,而触摸在superview中严格垂直移动,当视图旋转距离定义平移的垂直线更远时,预期的行为是什么 你使用平移手势而不是旋转手势,甚至只是直接触摸跟

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


我想知道,是否有一个数学公式可以精确地将平移的量转换为它应该旋转的量,这样在视图旋转时,用户的手指就可以保持在视图上了?例如,如果平移平移返回为1,则旋转平移的正确量是多少

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

  • 您是围绕视图的中心(默认)旋转视图,还是存在锚定点
  • 由于视图正在旋转,而触摸在superview中严格垂直移动,当视图旋转距离定义平移的垂直线更远时,预期的行为是什么
  • 你使用平移手势而不是旋转手势,甚至只是直接触摸跟踪,有什么原因吗?看起来它制造的问题比解决的问题多
  • 为了简单起见,我假设视图围绕其中心旋转,我将使用从视图右侧开始的平移作为示例,旋转角度不超过±90°。这里有两个选项:

  • 上下移动与旋转角度成线性关系,即,给定距离的平移使视图旋转相同的量,无论平移从何处开始。在这种情况下,您需要确定锅的顶部和底部界限。它们可能是superview的边界。无论如何,您都希望将沿Y方向行驶的距离转换为介于-1和1之间的值,其中-1表示下限,1表示上限。类似于2*(dy/superview.bounds.size.height-0.5)。将其乘以π/2(math.h中的M_PI_2),从范围[-1,1]缩放到范围[-π/2,π/2],就得到了在手势开始时视图旋转的加/减角度

  • 视图跟踪触摸,使其右边缘始终“指向”触摸。在这种情况下,平移不是非常有用,因为您只需要在superview中触摸的位置,而不需要移动的距离。计算dx和dy作为从视图中心到触摸位置的x和y坐标差。然后计算atan2(dy,dx),得到视图的绝对旋转角度


  • 我希望这能让你走上正轨。

    答案是角度应该是panAmount.y/矩形宽度


    这是证据:

    谢谢。需要一点时间来消化!