전달 된 점을 사용하여 점선 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
}
}
같이 보입니다하지만 가끔은 내가 서브 패스의 교차점에 문제가 :
내가 무슨 생각을 있어야 할 곳에 없는?
여분의 긴 대시는 한 경로의 끝과 다음 경로의 시작 부분을 조합 한 것입니까? 그렇다면 루프의 각 경로 끝에 빈 공간을 추가하십시오. 나는 그 문제에 대해 확신하지 못하고 있지만 사진을 보면서 추측 할 수 있습니다. – Pierce
예, 이것이 문제입니다. 하지만 여분의 공간을 추가하면 포인트 기점을 다시 계산해야합니다. 사실이 아니라고 생각합니다. –
아마도이 경로를 하나의 단일 경로로 그리는 방법을 말할 수 있습니까? 그래서 ios는 내가 필요한만큼 대시를 계산할 것입니다 –