iOS 繪制曲線圖

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.動態(tài)繪制曲線圖

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"];

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • #define kBlackColor [UIColor blackColor] //.h //劃線 + (voi...
    CHADHEA閱讀 855評論 0 1
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,690評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,268評論 5 13
  • Quartz2D以及drawRect的重繪機制字數(shù)1487 閱讀21 評論1 喜歡1一、什么是Quartz2D Q...
    PurpleWind閱讀 909評論 0 3
  • 1 以色列人到了以琳和西奈的曠野,饑餓難耐 2 耶和華降下食物,但要求第六天要撿比平時多一倍的食物 3 摩西告訴以...
    瓦登之湖閱讀 4,910評論 0 0

友情鏈接更多精彩內容