私はドーナツチャートを描いています。私は描画に使用CGPath
しており、描画後に に追加していCAShapeLayer
ます。最初に外側の円弧を描き、次に中心に向かって線を引きます。次に、現在の点に円弧を追加します。
これのスクリーンショットは以下です。
小さい円弧が行末にあることを確認してください。
私のコード、
for (int j = 0; j < numSubject; j++) {
int valueForSubject = [datasource valueOfSubjectAtIndex:j andLevel:i inDonutChartView:self];
endAngle = [self angleInRadianFromSubjectValue:valueForSubject];
DLog(@"Angle - %f",RADIANS_TO_DEGREES(endAngle))
//path
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddArc(path, NULL, prevPoint.x, prevPoint.y, radius, startAngle, endAngle, NO);
CGPoint currentPoint = CGPathGetCurrentPoint(path);
//find angles from start point to center and end point to center
CGFloat angle1 = [self angleFromFirstPoint:prevPoint secondPoint:centerPoint];
CGFloat angle2 = [self angleFromFirstPoint:CGPathGetCurrentPoint(path) secondPoint:centerPoint];
double endX1 = cos(angle1) * LEVEL_WIDTH + prevPoint.x;
double endY1 = sin(angle1) * LEVEL_WIDTH + prevPoint.y;
double endX2 = cos(angle2) * LEVEL_WIDTH + CGPathGetCurrentPoint(path).x;
double endY2 = sin(angle2) * LEVEL_WIDTH + CGPathGetCurrentPoint(path).y;
//first connect current point to end2 point then draw arc and then connect to end1
CGPathAddLineToPoint(path, NULL, endX2, endY2);
//CGPathAddArcToPoint(path, NULL, CGPathGetCurrentPoint(path).x, CGPathGetCurrentPoint(path).y, endX2, endY2, radius - LEVEL_WIDTH);
CGPathAddArc(path, NULL, CGPathGetCurrentPoint(path).x , CGPathGetCurrentPoint(path).y, radius - LEVEL_WIDTH, endAngle, startAngle, YES);
//CGPathAddLineToPoint(path, NULL, endX1, endY1);
//CGPathCloseSubpath(path);
A3DonutChartShapeLayer* arcLayer = [[A3DonutChartShapeLayer alloc]init];
arcLayer.path = path;
//arcLayer.frame = CGPathGetBoundingBox(path);
arcLayer.lineWidth = BORDER_WIDTH;
arcLayer.strokeColor = [UIColor blackColor].CGColor;
arcLayer.fillColor = [UIColor clearColor].CGColor;
[self.layer addSublayer:arcLayer];
ポインタはありますか?