Thật dễ dàng để vẽ một đường đứt nét với UIKit. Vì thế:
CGFloat dashes[] = {4, 2};
[path setLineDash:dashes count:2 phase:0];
[path stroke];
Có cách nào để vẽ một đường chấm chính xác?
Có ý kiến gì không?
Vì câu hỏi này thực sự cũ và không ai đưa ra được @IBDesignable
giải pháp đầy đủ , đây là ...
Hy vọng nó sẽ tiết kiệm cho ai đó một số đánh máy.
@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()
}
}
Tôi đã làm cho nó theo chiều dọc, bạn có thể dễ dàng thay đổi.
Chỉ cần đặt một UIView trong cảnh; làm cho nó bất kỳ chiều rộng nào bạn muốn và đó sẽ là chiều rộng của đường chấm.
Chỉ cần thay đổi lớp thành DottedVertical
và bạn đã hoàn tất. Nó sẽ hiển thị như vậy đúng trong bảng phân cảnh.
Lưu ý rằng mã ví dụ được cung cấp cho chiều cao của các khối ("totalCount", v.v.) dẫn đến các khối hoàn hảo, đến pixel, khớp với các phần cuối của UIView đang tạo dòng.
Hãy nhớ đánh dấu vào câu trả lời của RobMayoff bên dưới để cung cấp hai dòng mã cần thiết cho các dấu chấm-không-khối.