Ich versuche, wie diese um eine Ansicht gestrichelte Linie mit abgerundeten Ecken zu zeichnen:Eine gestrichelte Linie mit abgerundeten Ecken
class DashedLineView: UIView {
override func draw(_ rect: CGRect) {
let path = UIBezierPath(roundedRect: rect, cornerRadius: 8)
UIColor.clear.setFill()
path.fill()
UIColor.red.setStroke()
path.lineWidth = 3
let dashPattern : [CGFloat] = [3, 3]
path.setLineDash(dashPattern, count: 2, phase: 0)
path.stroke()
}
}
Das Ergebnis ist:
Wie man dort sehen kann, ist ein Problem mit Ecken, irgendeine Idee, wie man es repariert?
Aktualisiert: Mit @ Jon Rose answerDashedLineView
wie folgt aussieht jetzt:
class DashedLineView: UIView {
private let borderLayer = CAShapeLayer()
override func awakeFromNib() {
super.awakeFromNib()
borderLayer.strokeColor = UIColor.red.cgColor
borderLayer.lineDashPattern = [3,3]
borderLayer.backgroundColor = UIColor.clear.cgColor
borderLayer.fillColor = UIColor.clear.cgColor
layer.addSublayer(borderLayer)
}
override func draw(_ rect: CGRect) {
borderLayer.path = UIBezierPath(roundedRect: rect, cornerRadius: 8).cgPath
}
}
betrachten Sie die Verwendung eines CAShaperLayer anstelle von DrawRect. Ich habe dies mit CAShaperLayer und einem Pfad implementiert und es scheint gut. –
Können Sie bitte ein Beispiel veröffentlichen? – sash