2013-05-03 32 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