我有一个圆形的看起来很漂亮的UIView,它有一个围绕中心锚点旋转的手(想想:速度计)。我有它工作,所以手使用图层变换旋转到正确的位置给出一个值。
我希望用户能够将仪表的手拖动到另一个值。我很难搞清楚这种交互 - 我可以在手上使用UIPanGestureRecognizer来获得翻译点,但是如何计算调整后的手角?这实际上似乎更像是一个几何问题。
另外,因为它是一个圆形仪表,我不想根据转换点的x或仅y组成部分调整角度。
答案 0 :(得分:2)
如果我理解你,这是简单的几何:在极坐标系和笛卡尔坐标系之间转换。使用触摸点的位置查找圆周围的角度(就像它在极坐标中一样):
CGPoint touchPoint = ...;
double touchTheta = atanf(touchPoint.x, touchPoint.y);
然后你可以做一些事情,比如计算针的终点,给定它的长度(半径):
CGPoint needleEndpoint = (CGPoint){needleLength * sinf(touchTheta),
needleLength * cosf(touchTheta)};