1

我有一个看起来像圆形仪表的 UIView,它的手围绕中心锚点旋转(想想:速度计)。我让它工作,所以手旋转到使用层变换给定值的正确位置。

我希望用户能够将仪表的手拖动到另一个值。我在弄清楚这种交互时遇到了麻烦-我可以在手上使用 UIPanGestureRecognizer 来获取平移点,但是如何从中计算调整后的手角度?这实际上似乎更像是一个几何问题。

另外,因为它是一个圆形仪表,我不想仅根据平移点的 x 或 y 分量来调整角度。

4

1 回答 1

2

如果我理解正确,这是简单的几何:在极坐标和笛卡尔坐标系之间转换。使用触摸点的位置来找到围绕圆的角度(就像在极坐标中一样):

CGPoint touchPoint = ...;
double touchTheta = atanf(touchPoint.x, touchPoint.y);

然后你可以做一些事情,比如计算针的端点,给定它的长度(半径):

CGPoint needleEndpoint = (CGPoint){needleLength * sinf(touchTheta),
                                   needleLength * cosf(touchTheta)};
于 2013-04-17T18:24:20.903 回答