使用UIKit绘制虚线很容易。所以:
CGFloat dashes[] = {4, 2};
[path setLineDash:dashes count:2 phase:0];
[path stroke];
有没有办法画出真实的虚线?
有任何想法吗?
由于此问题确实存在很久,并且没有人提出完整的@IBDesignable
解决方案,因此这里是...
希望它可以节省一些键入的时间。
@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()
}
}
我将其垂直放置,可以轻松更改。
只需将UIView放在场景中即可;将其设置为任意宽度,这将是虚线的宽度。
只需将类更改为DottedVertical
,就可以完成。它将在情节提要中正确渲染。
请注意,给出的示例代码为块的高度(“ totalCount”等)导致块完美地到达像素,并与创建行的UIView的末端匹配。
确保在下面的RobMayoff答案中打勾,该答案给出了点非块的两行所需代码。