在ios中的视图上绘制一条线给定点和度?

时间:2014-01-24 14:42:33

标签: ios iphone cocoa cgpath

我有一种情况,用户将点击屏幕并输入度数,并且应该从给定度数的抽头点绘制一条线。

我使用以下路径代码绘制线条,但我无法以正确的程度绘制线条。

 CGMutablePathRef path = CGPathCreateMutable();
 CGPathMoveToPoint(path,NULL,touchx,touchy);
 CGPathAddLineToPoint(path, NULL,endX, endY);
 lineLayer = [CAShapeLayer layer];
 [lineLayer setPath:path];
 [lineLayer setFillColor:[[UIColor lightTextColor] CGColor]];
 [lineLayer setStrokeColor:[[UIColor blackColor] CGColor]];
 [lineLayer setAnchorPoint:CGPointMake(0.0f, 0.0f)];
 [lineLayer setPosition:CGPointMake(0.0f, 0.0f)];
 [drawingview.layer addSublayer:lineLayer];
 CGPathRelease(path); 

1 个答案:

答案 0 :(得分:2)

您发布的代码创建了一个包含起点和终点的路径,但没有发布最重要的位:您如何计算终点。

我认为这是你需要帮助的部分。

您需要使用基本的三角学。 iOS上的Trig基于弧度,因此您需要将度数转换为弧度:

CGFloat radians = M_PI * degrees / 180.0;

然后你需要根据你的起点计算你的终点。

记住印第安酋长“SOH CAH TOA”的助记符(正弦=对角/斜边,余弦=相邻/斜边,切线=对边/相邻)。

绘制一个直角三角形的图表,左边的角度和右边的角度:

enter image description here

X测量是相邻侧。

因此,如果余弦=邻近/斜边,则邻近= cos *斜边。

三角形的斜边是圆的半径。替换变量:

x = cos(angle) * radius

y测量是相反的一面。

如果sine = reverse / hypotenuse,则= = sine * hypotenuse。

三角形的斜边是圆的半径。替换变量:

y = sin(angle) * radius

因此,计算终点的代码可能如下所示:

CGFloat radius = 50; //Picked out of thin air; decide on a radius value

CGFloat deltaX = radius * cosf(radians);
CGFloat deltaY = radius * sinf(radians);

endX = touchX+deltaX;
endy = touchY+deltaY;