iphone - 使用 UIPanGestureRecognizer 旋转矩形

标签 iphone ios cocoa-touch math uiview

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

enter image description here

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

最佳答案

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

  1. 您是围绕其中心(默认)旋转 View 还是有 anchor ?
  2. 由于 View 正在旋转,而触摸在 super View 中严格垂直移动,因此当 View 旋转远离定义平移的垂直线时,预期的行为是什么?
  3. 您使用平移手势而不是旋转手势,甚至直接触摸跟踪是否有原因?它制造的问题似乎比它解决的问题还要多。

为了简单起见,我将假设 View 围绕其中心旋转,并且我将使用从 View 右侧开始的平移作为示例,旋转不超过 ±90°。这里有两个选项:

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

  2. View 跟踪触摸,以便其右边缘始终“指向”触摸。在这种情况下,平移并不是很有用,因为您只需要 super View 中触摸的位置,而不是行进的距离。将 dx 和 dy 计算为从 View 中心到触摸位置的 x 和 y 坐标差。然后计算atan2(dy, dx),你就得到了 View 的绝对旋转角度。

我希望这能让您走上正轨。

关于iphone - 使用 UIPanGestureRecognizer 旋转矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15210447/

相关文章:

iphone - UISegmentedControl 部署在 iOS 5 和 iOS 5.1 上的不同行为

iphone - 忽略 iOS 高分辨率 @2x 文件

iphone - iPhone 上 ABPeoplePickerNavigationController 的自定义地址簿

iphone - 在 UITableViewCell 上设置编辑样式

iphone - 无法使用 UITextView 退出 FirstResponder

iphone - 如何用两个相同的方法编写委托(delegate)协议(protocol)

ios - Firebase 数据库不工作

ios - 从 Parse 加载图像文件时出现错误

objective-c - UIModalTransitionStyleFlipHorizo​​ntal 期间的状态栏背景

iphone - 如何获取随机 UIColor 但将其限制为颜色的子集