绘图需求需要画带箭头的线,一开始想着绘制箭头好像很简单,类似Window开发有对应的lineCap属性去设置线。OC对比之后并没有这个属性,所以需要自己去算箭头的路径来绘制。这里需要用到三角函数。方法如下:
///输入起始点,和结束的点,箭头的点到线的间距,动态的算出箭头的对应的点左右两点
-(NSMutableArray *)arrowLineStartPoint:(CGPoint)p1
endPoint:(CGPoint)p2
l:(CGFloat)l
{
CGFloat x1 = p1.x; //lastPoint 起点
CGFloat y1 = p1.y;
CGFloat x2 = p2.x; //endPoint 终点
CGFloat y2 = p2.y;
CGFloata =0.5;//箭头与线段角度
///运用三角函数与反三角函数计算坐标
/**
1.三角函数
double sin (double);正弦
double cos (double);余弦
double tan (double);正切
2 、反三角函数
double asin (double); 结果介于[-PI/2, PI/2]
double acos (double); 结果介于[0, PI]
double atan (double); 反正切(主值), 结果介于[-PI/2, PI/2]
double atan2 (double, double); 反正切(整圆值), 结果介于[-PI, PI]
3 、双曲三角函数
double sinh (double);
double cosh (double);
double tanh (double);
*/
CGFloat x3 = x2 - l *cos(atan2((y2 - y1) , (x2 - x1)) - a);
CGFloat y3 = y2 - l *sin(atan2((y2 - y1) , (x2 - x1)) - a);
CGFloat x4 = x2 - l *sin(atan2((x2 - x1) , (y2 - y1)) - a);
CGFloat y4 = y2 - l *cos(atan2((x2 - x1) , (y2 - y1)) - a);
//箭头两端的端点坐标(x3,y3),(x4,y4)
NSMutableArray *arrowPoints=[NSMutableArray arrayWithObjects:NSStringFromPoint(CGPointMake(x3, y3)),NSStringFromPoint(CGPointMake(x4, y4)), nil];
returnarrowPoints;
}