OC 绘制带箭头的线

绘图需求需要画带箭头的线,一开始想着绘制箭头好像很简单,类似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;

}

你可能感兴趣的:(OC 绘制带箭头的线)