Cómo hacer esquina para Arco

He hecho un arco como el de abajo. Al especificar el radio, el ángulo de inicio, el ángulo de finalización

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

Ahora quiero hacer que la esquina del arco esté networkingondeada . Entonces, necesitamos dibujar círculos en ambos extremos. Debido a que estoy usando las dimensiones del marco dando constantes no funcionan.

introduzca la descripción de la imagen aquí

Intente configurar el parámetro de estado de charts CGContextSetLineJoin para networkingondear: CGContextSetLineCap(ctx, kCGLineCapRound);

Aquí está mi investigación basada en tu pregunta. El método reside en el método drawRect: escribí un breve método para resumirlo, para dar solo el parámetro startAngle, endAngle y radius al método. Por supuesto que puede ser refinado.

Te proporcioné una image de la salida de este método.

 - (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; } 

¡Espero eso ayude!

Arco con redondeo. Salida del método anterior.

Puede configurarlo fácilmente con

C objective

 CGContextSetLineCap(context, kCGLineCapRound); 

Rápido

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