UIKit ile kesikli bir çizgi çizmek kolaydır . Yani:
CGFloat dashes[] = {4, 2};
[path setLineDash:dashes count:2 phase:0];
[path stroke];
Gerçek bir noktalı çizgi çizmenin bir yolu var mı?
Herhangi bir fikir?
Bu soru gerçekten eski olduğu ve kimse tam bir @IBDesignable
çözüm getirmediği için, işte burada ...
Umarım birisini yazarken kurtarır.
@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()
}
}
Dikey yaptım, kolayca değiştirebilirsiniz.
Sadece sahneye bir UIView koyun; istediğiniz genişlikte olmasını sağlayın ve bu noktalı çizginin genişliği olacaktır.
Basitçe sınıfı olarak değiştirin DottedVertical
ve bitirdiniz. Film şeridinde böyle düzgün bir şekilde işlenecektir.
Blokların yüksekliği için verilen örnek kodun ("totalCount" vb.), Çizgiyi oluşturan UIView uçlarıyla eşleşen piksele mükemmel bir şekilde bloklarla sonuçlandığına dikkat edin.
Aşağıdaki RobMayoff'un cevabını işaretlediğinizden emin olun, bu da blok olmayan noktalar için gereken iki kod satırını verir.