用触摸旋转圆规/米的指针

时间:2013-04-17 17:27:53

标签: ios objective-c uiview quartz-core

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

我希望用户能够将仪表的手拖动到另一个值。我很难搞清楚这种交互 - 我可以在手上使用UIPanGestureRecognizer来获得翻译点,但是如何计算调整后的手角?这实际上似乎更像是一个几何问题。

另外,因为它是一个圆形仪表,我不想根据转换点的x或仅y组成部分调整角度。

1 个答案:

答案 0 :(得分:2)

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

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

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

CGPoint needleEndpoint = (CGPoint){needleLength * sinf(touchTheta),
                                   needleLength * cosf(touchTheta)};