Swift - Как получить закругленный колпачок на CAShapeLayer или UIBezierPath(ovalInRect: ovalRect)
У меня есть эти 2 функции ниже в моем классе, который расширяет CAShapeLayer, но я не могу получить дугу с закругленными концевыми заглушками каждый раз, когда я рисую путь. Это всегда выглядит так:
Я уже пытался использовать kCALineCapRound безуспешно. Есть идеи?
self.lineShape.lineCap = kCALineCapRound;
self.lineShape.lineJoin = kCALineJoinRound;
private func mask() {
let maskLayer = CAShapeLayer()
maskLayer.bounds = self.bounds
let ovalRect = self.hollowRect
let path = UIBezierPath(ovalInRect: ovalRect)
path.appendPath(UIBezierPath(rect: maskLayer.bounds))
maskLayer.path = path.CGPath
maskLayer.lineShape.lineCap = kCALineCapRound;
maskLayer.lineShape.lineJoin = kCALineJoinRound;
maskLayer.position = self.currentCenter
maskLayer.fillRule = kCAFillRuleEvenOdd
self.mask = maskLayer
}
private func drawTrack(ctx: CGContext) {
let adjustDegree = Math.adjustDegree(self.setting.startAngle, degree: self.degree)
let centerX = self.currentCenter.x
let centerY = self.currentCenter.y
let radius = min(centerX, centerY)
CGContextSetFillColorWithColor(ctx, self.setting.trackingColor.CGColor)
CGContextSetLineCap(ctx, CGLineCap.Round)
CGContextBeginPath(ctx)
CGContextMoveToPoint(ctx, centerX, centerY)
CGContextAddArc(ctx, centerX, centerY, radius,
CGFloat(Math.degreesToRadians(self.setting.startAngle)),
CGFloat(Math.degreesToRadians(adjustDegree)), 0)
CGContextClosePath(ctx);
CGContextFillPath(ctx);
}
1 ответ
Если это слой формы, вы просто говорите myShapeLayer.lineCap = "round"
, (Я озадачен вашей маской и кодом рисования, который не имеет ничего общего со слоем формы, поэтому я не понимаю, как он должен вписываться.)
Это слой формы с круговой траекторией:
Версия Swift 4:
myShapeLayer.lineCap = .round
Документацию по значениям ограничения строки можно найти здесь