Как сделать угол для дуги

Я сделал дугу, как показано ниже. Задав радиус, угол начала, угол конца

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

Теперь я хочу сделать угол закругленной арки. Поэтому нужно рисовать круги на обоих концах. Потому что я использую размеры кадра, дающие константы, не работают.

введите описание изображения здесь

Ответ 1

Попробуйте установить параметр состояния графики CGContextSetLineJoin для округления: 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;
}

Надеюсь, что это поможет!

Дуга с закруглением. Выйти из метода выше.

Ответ 2

Вы можете легко установить его на

Objective-C

CGContextSetLineCap(context, kCGLineCapRound);

Свифта

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