Apply rounded corners to arc created with UIBezierPath

こ雲淡風輕ζ 提交于 2019-12-21 09:35:15

问题


I am working on a circular progress bar that i've created using UIBezierPath. The progress bar looks like the following picture:

My question is: how to make the edge of the arc rounded and not rectangular?

The code i used to draw the arc looks like is:

 // Draw the arc with bezier path
        int radius = 100;

        arc = [CAShapeLayer layer];
        arc.path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100, 50) radius:radius startAngle:M_PI endAngle:M_PI/150 clockwise:YES].CGPath;
        arc.position = CGPointMake(CGRectGetMidX(self.view.frame)-radius,
                                    CGRectGetMidY(self.view.frame)-radius);
        arc.fillColor = [UIColor clearColor].CGColor;
        arc.strokeColor = [UIColor purpleColor].CGColor;
        arc.cornerRadius = 0.5;
        arc.lineWidth = 6;

        [self.view.layer addSublayer:arc];

        // Animation of the progress bar
        drawAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
        drawAnimation.duration            = 5.0; // "animate over 10 seconds or so.."
        drawAnimation.repeatCount         = 1.0;  // Animate only once..
        drawAnimation.removedOnCompletion = YES;   // Remain stroked after the animation..
        drawAnimation.fromValue = [NSNumber numberWithFloat:0.0f];
        drawAnimation.toValue   = [NSNumber numberWithFloat:10.0f];
        drawAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
        [arc addAnimation:drawAnimation forKey:@"drawCircleAnimation"];

I tried to use arc.cornerRadius but it seemed to return nothing.

Any help would be appreciated.

Thank you in advance!

Granit


回答1:


Set lineCapStyle to kCGLineCapRound (On the bezier path) to draw the ends of the lines with a round edge.

You can also set the lineCap on the shape layer to do the same thing.




回答2:


To make corner as round you can use this.

arc.lineCap = @"round";



回答3:


The swift equivalent is:

let circlePath = UIBezierPath(…)
circlePath.lineCapStyle = .round


来源:https://stackoverflow.com/questions/20666033/apply-rounded-corners-to-arc-created-with-uibezierpath

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!