Il est facile de tracer une ligne pointillée avec UIKit. Donc:
CGFloat dashes[] = {4, 2};
[path setLineDash:dashes count:2 phase:0];
[path stroke];
Existe-t-il un moyen de dessiner une véritable ligne pointillée?
Des idées?
Puisque cette question est vraiment ancienne et que personne n'a apporté de @IBDesignable
solution complète , la voici ...
J'espère que cela permet à quelqu'un d'économiser de la frappe.
@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()
}
}
Je l'ai fait verticalement, vous pouvez facilement changer.
Mettez simplement un UIView dans la scène; faites-en la largeur que vous souhaitez et ce sera la largeur de la ligne pointillée.
Changez simplement la classe en DottedVertical
et vous avez terminé. Il sera rendu comme ça correctement dans le storyboard.
Notez que l'exemple de code donné pour la hauteur des blocs ("totalCount" et ainsi de suite ...) donne les blocs parfaitement, au pixel, en correspondance avec les extrémités de l'UIView qui crée la ligne.
Assurez-vous de cocher la réponse de RobMayoff ci-dessous, qui donne les deux lignes de code nécessaires pour les points-pas-blocs.