Ich möchte diagonale Linie mit abgerundeten Ecken in Sicht zeichnen. Mein Code:CAShapeLayer Linie abgerundete Ecken
class DiagonalView: UIView {
// MARK: - Public Properties
@IBInspectable var fillColor: UIColor = UIColor.white {
didSet {
self.diagonalLayer.strokeColor = fillColor.cgColor
self.redraw()
}
}
@IBInspectable var lineWidth: CGFloat = 1 {
didSet {
self.diagonalLayer.lineWidth = lineWidth
self.redraw()
}
}
// MARK: - Private Properties
private var diagonalLayer: CAShapeLayer = {
let layer = CAShapeLayer()
layer.fillColor = UIColor.clear.cgColor
layer.strokeColor = UIColor.white.cgColor
layer.lineCap = kCALineCapRound
layer.lineWidth = 1
return layer
}()
// MARK: - Constructors
override func awakeFromNib() {
super.awakeFromNib()
self.layer.addSublayer(self.diagonalLayer)
self.setupPath()
}
override func layoutSubviews() {
super.layoutSubviews()
self.setupPath()
}
// MARK: - Private methods
private func redraw() {
self.setNeedsDisplay()
}
private func setupPath() {
let startPoint = CGPoint(x: self.frame.width, y: 0)
let endPoint = CGPoint(x: 0, y: self.frame.height)
let path = UIBezierPath()
path.move(to: startPoint)
path.addLine(to: endPoint)
path.close()
self.diagonalLayer.path = path.cgPath
}
}
Linie Position richtig ist. Aber Ecken sind nicht abgerundet. Ergebnis:
Der Code sieht gut aus, aber ich denke, Chaos etwas ... Irgendwelche Vorschläge?
Ich habe noch nicht versucht, abgerundete Endkappen auf einer Formschicht zu bekommen. Es ist merkwürdig, dass die Formebene einen Linienbegrenzungsstil aufweist, der vom Stil der Linienbegrenzung des Pfads getrennt ist. Was, wenn Sie den Linienbegrenzungsstil auf dem CGPath, das Sie in Ihrer Formebene installieren, auf gerundet einstellen? –