Невозможно округлить колпачки в UIBezierPath Arc даже с kCGLineCapRound

Я не могу отображать закругленные колпачки на моей дуге, созданной с помощью UIBezierPath. Он по-прежнему отлично квадрат, независимо от того, установлен ли kCGLineCapRound или нет.

Этот вопрос должен быть таким же, как этот, однако решение не работает.

Вот пример кода, который у меня есть в viewWillAppear (только для тестовых целей):

int radius = 100;
CAShapeLayer *arc = [CAShapeLayer layer];
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100, 50) radius:radius startAngle:M_PI endAngle:M_PI/150 clockwise:YES];
path.lineCapStyle = kCGLineCapRound;

arc.path = path.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.lineWidth = 10.0f;
arc.cornerRadius = 3.0f;

Вот как это выглядит:

whyy

Я беспомощен, поэтому буду признателен за любую помощь. Спасибо, ребята.

Ответ 1

Используйте свойство lineCap CAShapeLayer, а не lineCapStyle пути.

arc.lineCap = kCALineCapRound;

Если вы вызываете метод path stroke (например, если вы делаете это в drawRect или вручную рисуете в UIGraphicsContext), тогда установите атрибуты, такие как стили cap или join в UIBezierPath. Но при использовании CAShapeLayer атрибуты устанавливаются на уровне формы, а не в пути.