2017-09-01 88 views
0

我知道用UIBezierPath()來繪製一個虛線狀:是否有可能繪製虛線,而無需使用UIBezierPath

let path = UIBezierPath() 
path.setLineDash([CGFloat(4), CGFloat(4)], count: 2, phase: 0) 
path.lineCapStyle = CGLineCap.round 
path.move(to: startPoint) 
path.addLine(to: endPoint) 
path.stroke() 

它工作正常。但我怎麼能在上下文中畫一條虛線?就像下面的代碼可以得出一個實線,無論我是否添加

context.setLineDash(phase: 3, lengths: [3,2]) 

整個代碼:

override func draw(_ rect: CGRect) { 
     if let context = UIGraphicsGetCurrentContext() { 
      let startPoint = CGPoint(x: 50, y: 10) 
      let endPoint = CGPoint(x: rect.width-100, y: 10) 
      context.setLineDash(phase: 3, lengths: [3,2]) 
      context.setLineWidth(10) 
      context.move(to: startPoint) 
      context.addLine(to: endPoint) 
      context.setStrokeColor(UIColor.red.cgColor) 
      context.setLineCap(.round) 
      context.strokePath() 

     } 
    } 

結果是:

enter image description here

什麼不對?

回答

1

想一想...

線寬爲10 線端是圓的。 所以線帽的半徑是5.

N.B.該線在線帽的中心點結束(不在帽的末端)。

每一劃線的長度是3和線之間的間隙是2

因此,帽的半徑大於所述線之間的間隙太大大得多。所以每條線都與下一條線重疊。

嘗試使線路長度等...

[3, 12]

這應該使3點長爲5的帽半徑,然後2的帽的端部之間的間隙的線(12 - 5 - 5)。

+1

正確!謝謝!但是我認爲當線寬爲10時線帽的半徑是5,對嗎?如果差距爲2應該是'''[3,12]''' –

+1

@WilliamHu啊你發現我的*咳嗽*故意*咳嗽*錯誤。哈哈!是的,你是對的,半徑將是5而不是10.現在更新:D – Fogmeister

+0

我可以問另一個問題嗎?我想先畫出虛線然後再畫實線。但'''context.setLineDash'''後我無法清理這個虛線設置,我怎麼能做到這一點? –