我有一种情况,用户将在屏幕上点击并输入度数,并且应在给定度数下从轻敲点绘制一条线。

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

 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);

最佳答案

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

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

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

CGFloat radians = M_PI * degrees / 180.0;


然后,您需要根据起点计算终点。

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

绘制一个直角三角形的图,左角为正角,右角为正角:



X尺寸为相邻边。

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

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

x = cos(angle) * radius


y的测量值相反。

如果正弦=反向/斜边,则反向=正弦*斜边。

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

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;

10-08 15:04