È facile disegnare una linea tratteggiata con UIKit. Così:
CGFloat dashes[] = {4, 2};
[path setLineDash:dashes count:2 phase:0];
[path stroke];
C'è un modo per disegnare una vera linea tratteggiata?
Qualche idea?
Poiché questa domanda è davvero vecchia e nessuno ha messo una @IBDesignable
soluzione completa , eccola qui ...
Spero che salvi qualcuno che scrive.
@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()
}
}
L'ho fatto verticale, puoi facilmente cambiare.
Basta inserire una UIView nella scena; scegli la larghezza che desideri e quella sarà la larghezza della linea tratteggiata.
Cambia semplicemente la classe in DottedVertical
e il gioco è fatto. Renderà così correttamente nello storyboard.
Si noti che il codice di esempio fornito per l'altezza dei blocchi ("totalCount" e così via ...) si traduce in blocchi perfettamente, al pixel, corrispondenti alle estremità dell'UIView che sta creando la linea.
Assicurati di spuntare la risposta di RobMayoff di seguito che fornisce le due righe di codice necessarie per i punti non i blocchi.