いくつかの通過点を使用して破線のUIBezierPathを作成します。破線のUIBezierPathサブパスジャンクション
let pathLayer = CAShapeLayer()
pathLayer.strokeColor = UIColor.blue.cgColor
pathLayer.lineWidth = 3.0
pathLayer.fillColor = UIColor.clear.cgColor
pathLayer.lineDashPattern = [5.0, 2.0]
pathLayer.lineDashPhase = 0
let path = PathCreator.createPath(resultPoints)
pathLayer.path = path.cgPath
私はPathCreatorを簡略化してきましたが、完全にそれがこの
PathCreator {
func createPath(resultPoints: [CGPoint]) -> UIBezierPath {
let path = UIBezierPath()
for i in 0..<(resultPoints.count-1) {
if resultPoints[i] is CircleCenterPoint {
continue
}
if resultPoints[i] is ArcEndPoint {
path.move(to: resultPoints[i].cg())
path.addLine(to: resultPoints[i+1].cg())
}
if let arcStartPoint = resultPoints[i] as? ArcStartPoint,
let circleCenterPoint = resultPoints[i+1] as? CircleCenterPoint,
let arcEndPoint = resultPoints[i+2] as? ArcEndPoint {
path.addArc(withCenter: circleCenterPoint.cg(),
radius: circleCenterPoint.radius,
startAngle: arcStartPoint.arcStartAngle,
endAngle: arcEndPoint.arcEndAngle,
clockwise: circleCenterPoint.clockwise)
} else {
path.move(to: resultPoints[i].cg())
path.addLine(to: resultPoints[i+1].cg())
}
}
return path
}
}
のようになります。しかし、時には、私はサブパスの接合部に問題を抱えている:
私は何行方不明?
余分な長いダッシュは、1つのパスの終わりと次のパスの始まりの組み合わせですか?その場合は、ループ内の各パスの最後に余分な空白スペースを追加してください。私はそれが問題であるとは確信していませんが、私はちょうど絵を見て私の推測だろう。 – Pierce
はい、これが問題です。しかし、私は余分なスペースを追加すると、私はポイントの起源を再計算する必要があります、そして私はそれが真の方法ではないと信じて) –
多分1つの単一のパスとしてすべてのこのルートを描くようにアイオスを教える方法がありますか?だから、iosは必要なときにダッシュを計算するでしょう –