2013-05-03 77 views
0

degrees如何获取的角度,而我想旋转的UIView

红线是在其中心锚点旋转的UIView。我想要实现的是,当我将手指拖到绿色的圆圈上时,将其保持在红色圆圈上,那条红色线条与手指一起移动。但是如果不知道角度,我就无法做到这一点。我如何计算它?

+0

您是要求半径还是度数? – Pfitz 2013-05-03 13:57:50

+0

你有半径,这是152 – vikingosegundo 2013-05-03 13:57:58

+0

我问每次我的手指移动时如何计算它,并获得我在图像上描述的区域(304宽度,140高度)不同的坐标 – 2013-05-03 14:00:36

回答

1

您可以使用毕达哥拉斯定理来计算半径。在这种情况下,您知道圆的中心位于x:152,y:0。你的触摸位置将在x1,y1,这给你足够的信息来计算腿。 在代码:

CGPoint center = CGPointMake(152.0f, 0.0f); 
CGPoint touchPoint = [gestureRecognizer locationInView:yourView]; 
float xLeg = fabs(center.x - touchPoint.x); 
float yLeg = fabs(touchPoint.y); 
angle = atan(xLeg/yLeg); 
//float radius = sqrt(pow(xLeg, 2) + pow(yLeg, 2)); 

希望它能帮助!

注:编辑以反映措辞的变化。原始问题要求半径。

+0

太棒了!这正是我所期待的!非常感谢你。 – 2013-05-03 14:38:57

+1

我可能会误解,但这种解决方案无法分辨角度是否偏离中心。 – vikingosegundo 2013-05-03 15:12:39

+0

@ikinciviking你说得对。检查touchPoint.x是否大于或小于center.x应该有效。 – Pablo 2013-05-03 15:20:31

1

使用3点的反正切。 (中心,开始触摸的点/或您定义为角度0的固定位置,当前触点)

double AngleBetweenThreePoints(CGPoint point1,CGPoint point2, CGPoint point3) 
{ 
    CGPoint p1 = CGPointMake(point2.x - point1.x, -1*point2.y - point1.y *-1); 
    CGPoint p2 = CGPointMake(point3.x -point1.x, -1*point3.y -point1.y*-1); 
    double angle = atan2(p2.x*p1.y-p1.x*p2.x,p1.y*p2.y);   
    return angle /(2* M_PI); 
} 
+1

+1好答案。可能对于绘图来说足够好,但角度的符号在零点附近会有点不稳定。可以添加一个阈值:if(epsilon danh 2013-05-03 14:22:57