如何为Arc制作角落

时间:2016-12-29 07:31:04

标签: ios objective-c geometry

我做了一个如下的弧线。通过指定半径,起始角度,结束角度

    CGContextAddArc(ctx, self.frame.size.width/2  , self.frame.size.height/2,
 self.radius, 2*M_PI, 3*M_PI/2-ToRad(angle), 0);

现在我希望将拱角转为。因此需要在两端绘制圆圈。因为我使用框架尺寸给定常数不起作用。

enter image description here

2 个答案:

答案 0 :(得分:10)

尝试将图形状态参数CGContextSetLineJoin设置为round:CGContextSetLineCap(ctx, kCGLineCapRound);

以下是根据您的问题进行的研究。该方法驻留在drawRect:方法中,我编写了一个简短的方法来抽象它,以便只为方法提供参数startAngle,endAngle和radius。当然可以改进。

我从这个方法的输出中提供了一张图片。

- (void)drawRect:(CGRect)rect {
    float startAngle = 0;
    float endAngle = 60;
    float radius = 50.0;

    CGContextRef ctx = [self drawRoundedArcWithStartAngle:startAngle endAngle:endAngle radius:radius];
    CGContextStrokePath(ctx);
}

- (CGContextRef)drawRoundedArcWithStartAngle:(float)startAngle endAngle:(float)endAngle radius:(float)radius {

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    //    [CGContextAddArc(ctx, self.frame.size.width/2  , self.frame.size.height/2, radius, 2*M_PI, 3*M_PI/2-(angle * M_PI / 180), 0)];

    CGContextAddArc(ctx, self.frame.size.width/ 2, self.frame.size.height/2, radius, (startAngle * M_PI / 180), (endAngle * M_PI / 180), 0);
    CGContextSetRGBStrokeColor(ctx, 0.0, 0.0, 0.0, 1.0);
    CGContextSetLineWidth(ctx, 20.0f);
    CGContextSetLineCap(ctx, kCGLineCapRound);
    return ctx;
}

希望它有所帮助!

Arc with rounding. Output from the method above.

答案 1 :(得分:0)

您可以通过

轻松设置

目标-C

CGContextSetLineCap(context, kCGLineCapRound);

夫特

context?.setLineCap(.round)
context?.addArc(center: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true/false)