2017-09-01 5 views
0

を使用せずに破線を描画することができます。しかし、どのように私は文脈で破線を描くことができますか?は、それは私が好き破線を描画するUIBezierPath()を使用して知っているUIBezierPath

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

何かコード以下のように関係なく、私は

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

全体のコードを追加した場合の実線を引くことはできませんか?

答えて

1

は、線幅がラインキャップが丸い10 です...それについて

を考えてみてください。 したがって、ラインキャップの半径は5です。

N.B.ラインはラインキャップの中心点で終わります(キャップ​​の端ではありません)。

各ダッシュの長さは3であり、ライン間のギャップは

2.したがってキャップの半径は線間の間隔よりもはるかに大きいです。したがって、各行は次の行にオーバーラップしています。

12(5のキャップの半径3点長い線、その後2のキャップの端部との間に隙間を作る必要があることを

[3, 12]

...ラインのような長行う試し - 5 - 5)。

+1

正解!ありがとうございました!しかし、ラインの幅が10のとき、ラインキャップの半径は5だと思いますよね?ギャップが2の場合は '' '[3、12]' '' –

+1

@WilliamHuああ、あなたは私の咳*慎重な*咳*ミスを見つけたはずです。ハハ!はい、そうです、半径は10ではなく5になります。今更新する:D – Fogmeister

+0

別の質問がありますか?まず最初に実線を描きたい。しかし、 '' 'context.setLineDash'''の後に私はこのダッシュライン設定をクリーンアップできません、どうすればいいですか? –

関連する問題