美文网首页
iOS 绘制曲线图

iOS 绘制曲线图

作者: Sam129 | 来源:发表于2016-11-30 19:48 被阅读0次

    1.画直线

    - (void)drawRect:(CGRect)rect

    {

    //获得处理的上下文

    CGContextRef context = UIGraphicsGetCurrentContext();

    //指定直线样式

    CGContextSetLineCap(context, kCGLineCapSquare);

    //直线宽度

    CGContextSetLineWidth(context, 2.0);

    //设置颜色

    CGContextSetRGBStrokeColor(context,0.314, 0.486, 0.859, 1.0);

    //开始绘制

    CGContextBeginPath(context);

    //画笔移动到点(31,170)

    CGContextMoveToPoint(context,31, 70);

    //下一点

    CGContextAddLineToPoint(context,129, 148);

    //下一点

    CGContextAddLineToPoint(context,159, 148);

    //绘制完成

    CGContextStrokePath(context);

    }

    2.画折线图(曲线图)

    CGContextRef ctx = UIGraphicsGetCurrentContext();

    UIBezierPath *path = [[UIBezierPath alloc] init];

    //初始点

    CGPoint startPoint;

    //移动到初始点

    [path moveToPoint:startPoint];

    //是否为曲线图

    BOOL isCurve;

    //点的集合

    NSArray *pointArray;

    //设置点之间的水平距离

    CGFloat xInstance = 10;

    for (int i = 0; i < pointArray.count; i++) {

    CGPoint endPoint =CGPointMake(xInstance *i, [pointArray[i] floatValue]);

    CGFloat centerX = (startPoint.x + endPoint.x)/2;

    CGPoint crl1 = CGPointMake(centerX, startPoint.y);

    CGPoint crl2 = CGPointMake(centerX, endPoint.y);

    if (isCurve) {

    //添加曲线路径,用于曲线图

    [path addCurveToPoint:endPoint controlPoint1:crl1 controlPoint2:crl2];

    startPoint = endPoint;

    }

    else

    {

    //添加直线路径,用于折线图

    [path addLineToPoint:endPoint];

    }

    }

    //线的颜色

    [[UIColor yellowColor] set];

    //线宽

    CGContextSetLineWidth(ctx, 2);

    // 将路径添加到图形上下文

    CGContextAddPath(ctx, path.CGPath);

    // 渲染

    CGContextStrokePath(cox);

    3.动态绘制曲线图

    CGContextRef ctx = UIGraphicsGetCurrentContext();

    UIBezierPath *path = [[UIBezierPath alloc] init];

    //初始点

    CGPoint startPoint;

    //移动到初始点

    [path moveToPoint:startPoint];

    //是否为曲线图

    BOOL isCurve;

    //点的集合

    NSArray *pointArray;

    //设置点之间的水平距离

    CGFloat xInstance = 10;

    for (int i = 0; i < pointArray.count; i++) {

    CGPoint endPoint =CGPointMake(xInstance *i, [pointArray[i] floatValue]);

    CGFloat centerX = (startPoint.x + endPoint.x)/2;

    CGPoint crl1 = CGPointMake(centerX, startPoint.y);

    CGPoint crl2 = CGPointMake(centerX, endPoint.y);

    if (isCurve) {

    //添加曲线路径,用于曲线图

    [path addCurveToPoint:endPoint controlPoint1:crl1 controlPoint2:crl2];

    startPoint = endPoint;

    }

    else

    {

    //添加直线路径,用于折线图

    [path addLineToPoint:endPoint];

    }

    }

    CAShapeLayer *pathLayer = [CAShapeLayer layer];

    pathLayer.frame = self.bounds;

    pathLayer.path = path.CGPath;

    //线的颜色

    pathLayer.strokeColor = [plot.lineColor CGColor];

    //线的填充色

    pathLayer.fillColor = nil;

    //线宽

    pathLayer.lineWidth = 2;

    pathLayer.lineJoin = kCALineJoinBevel;

    [self.layer addSublayer:pathLayer];

    //添加动画

    CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];

    pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];

    //绘制时间

    pathAnimation.duration = plot.pointArray.count * 0.3;

    pathAnimation.fromValue = [NSNumber numberWithFloat:0.0f];

    pathAnimation.toValue = [NSNumber numberWithFloat:1.0f];

    [pathLayer addAnimation:pathAnimation forKey:@"strokeEnd"];

    相关文章

      网友评论

          本文标题:iOS 绘制曲线图

          本文链接:https://www.haomeiwen.com/subject/cjvtmttx.html