我有一条由UIBezierPath
绘制的线:
let line = CAShapeLayer()
line.path = UIBezierPath(arcCenter: center,
radius: radius,
startAngle: CGFloat(114.0/180.0) * .pi,
endAngle: .pi,
clockwise: true).cgPath
line.lineWidth = LINE_WIDTH
line.strokeColor = UIColor.red.withAlphaComponent(0.9).cgColor
line.fillColor = UIColor.clear.cgColor
我尝试通过添加一些新的CAShapeLayer()
来绕过这个拐角:
let corner = CAShapeLayer()
corner.path = UIBezierPath(arcCenter: coordByCorner(114.0*1.00035),
radius: LINE_WIDTH/2,
startAngle: CGFloat(114.0/180.0) * .pi,
endAngle: CGFloat(114.0/180.0 + 1) * .pi,
clockwise: false).cgPath
corner.strokeColor = UIColor.clear.cgColor
corner.fillColor = UIColor.red.withAlphaComponent(0.9).cgColor
line.addSublayer(corner)
但我认为这是一个糟糕的变体,当我改变图层的颜色时,颜色会随着不同的timeInterval而变化。
而且,这一切看起来像这样:
P.S.:1.00035有消除层之间差距。alpha必须〈1。0(0.1 - 0.9)。那么如何在保持阿尔法的同时做到这一点呢?
3条答案
按热度按时间ttygqcqt1#
通过添加kCALineCapRound解决了问题
qltillow2#
一个简单的方法是创建一个向内移动所需
cornerRadius
的路径,用两倍粗的线画它,并应用圆形线连接样式。下面是示例结果:
0yg35tkg3#
根据当前版本的另一种方式