CAShapeLayer:开始/结束时的线帽不同

Luc*_*ano 5 cashapelayer ios

我正在使用 CAShapeLayer 绘制一个半圆,我希望在开头有一个 kCGLineCapRound ,在结尾有一个 kCGLineCapButt 。我怎样才能做到这一点?

UIBezierPath *circlePathMax = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.view.center.x, self.view.center.y) radius:radius startAngle:angle1 endAngle:angle2 clockwise:YES];
             CAShapeLayer *circleMax;
             circleMax               = [CAShapeLayer layer];
             circleMax.path          = circlePathMax.CGPath;
             circleMax.lineCap       = kCALineCapRound;
             circleMax.fillColor     = [UIColor clearColor].CGColor;
             circleMax.lineWidth     = 10;
             circleMax.strokeColor = [UIColor colorWithRed:255.0/255.0f green:255.0f/255.0f blue:255.0f/255.0f alpha:0.7f].CGColor;
             circleMax.zPosition     = 3;
             [self.view.layer addSublayer:circleMax];
Run Code Online (Sandbox Code Playgroud)

我只能指定一个通用 lineCap

Luc*_*ano 0

这是我用过的技巧。就我而言,我必须在渐变半圆的 imageView 顶部绘制一个具有透明度的半圆。这允许我使用 .butt 和背景颜色(带有 alpha 分量)作为描边颜色来“隐藏”方角。

let circleMin = CAShapeLayer.init()
let circlePathMin = UIBezierPath.init(arcCenter: myCenter, radius: myRadius, startAngle: startingAngle, endAngle: endingAngle, clockwise: true)
circleMin.path = circlePathMin.cgPath
circleMin.lineCap = .butt
circleMin.fillColor = UIColor.clear.cgColor
circleMin.lineWidth = 14
circleMin.strokeColor = self.containerView.backgroundColor?.withAlphaComponent(0.7).cgColor
circleMin.zPosition = 3
containerView.layer.addSublayer(circleMin)
Run Code Online (Sandbox Code Playgroud)