Mit UIKit ist es einfach, eine gestrichelte Linie zu zeichnen. So:
CGFloat dashes[] = {4, 2};
[path setLineDash:dashes count:2 phase:0];
[path stroke];
Gibt es eine Möglichkeit, eine echte gepunktete Linie zu zeichnen?
Irgendwelche Ideen?
Da diese Frage wirklich alt ist und niemand eine vollständige @IBDesignable
Lösung gefunden hat, ist sie hier ...
Hoffe, es erspart jemandem das Tippen.
@IBDesignable class DottedVertical: UIView {
@IBInspectable var dotColor: UIColor = UIColor.etc
@IBInspectable var lowerHalfOnly: Bool = false
override func draw(_ rect: CGRect) {
// say you want 8 dots, with perfect fenceposting:
let totalCount = 8 + 8 - 1
let fullHeight = bounds.size.height
let width = bounds.size.width
let itemLength = fullHeight / CGFloat(totalCount)
let path = UIBezierPath()
let beginFromTop = CGFloat(0.0)
let top = CGPoint(x: width/2, y: beginFromTop)
let bottom = CGPoint(x: width/2, y: fullHeight)
path.move(to: top)
path.addLine(to: bottom)
path.lineWidth = width
let dashes: [CGFloat] = [itemLength, itemLength]
path.setLineDash(dashes, count: dashes.count, phase: 0)
// for ROUNDED dots, simply change to....
//let dashes: [CGFloat] = [0.0, itemLength * 2.0]
//path.lineCapStyle = CGLineCap.round
dotColor.setStroke()
path.stroke()
}
}
Ich habe es vertikal gemacht, du kannst es leicht ändern.
Fügen Sie einfach eine UIView in die Szene ein. Machen Sie es wie Sie möchten, und das ist die Breite der gepunkteten Linie.
Ändern DottedVertical
Sie einfach die Klasse in und Sie sind fertig. Es wird so richtig im Storyboard gerendert.
Beachten Sie, dass der für die Höhe der Blöcke angegebene Beispielcode ("totalCount" usw.) dazu führt, dass die Blöcke perfekt zum Pixel passen und mit den Enden der UIView übereinstimmen, die die Linie erstellt.
Stellen Sie sicher, dass Sie RobMayoffs Antwort unten ankreuzen, die die beiden erforderlichen Codezeilen für Punkte-nicht-Blöcke enthält.