Как добавить одну плавную линию с несколькими CGPoint Swift 2.0

У меня есть эта функция, которая принимает Array[CGPoint] и я пытаюсь создать единый тренд. Я не могу получить плавную линию через массив точек, когда я использую moveToPoint() Функция после каждой точки, я получаю эту черную линию на заднем плане. Это мой код и изображения вывода:

class func drawLineThroughPoint(start : CGPoint, throughPoint through: [CGPoint], endPoint end:CGPoint, ofColor lineColor: UIColor, inView view:UIView) {

    //design the path
    let path = UIBezierPath()
    path.moveToPoint(start)
    for (_, point) in EnumerateSequence(through) {
        path.addLineToPoint(point)
        //path.moveToPoint(point) MARK: See image with moveToPoint
        path.moveToPoint(point) //MARK: See image without moveToPoint
    }
    path.addLineToPoint(end)

    //design path in layer
    //design path in layer
    let shapeLayer = CAShapeLayer()
    shapeLayer.path = path.CGPath
    shapeLayer.strokeColor = lineColor.CGColor
    shapeLayer.shadowColor = lineColor.CGColor
    shapeLayer.shadowOffset = CGSize(width: 0, height: 2)
    shapeLayer.shadowOpacity = 0.95
    shapeLayer.shadowRadius = 5
    shapeLayer.fillColor = UIColor.clearColor().CGColor
    shapeLayer.lineJoin = kCALineJoinRound
    shapeLayer.lineCap = kCALineCapRound

    shapeLayer.lineWidth = 10.0

    view.layer.addSublayer(shapeLayer)
}

С path.moveToPoint()

Без path.moveToPoint

Без path.moveToPoint()

С path.moveToPoint

2 ответа

Решение

Без moveToPoint в цикле for это правильный подход.

Если вы используете moveToPoint в цикле for вы создаете новый сегмент линии для каждого участка пути, поэтому он выглядит отключенным.

Ваша "черная линия на заднем плане" на первом изображении - это просто CAShapeLayer пытаясь заполнить область, покрытую пути.

Вы можете исправить это, просто установив fillColor из CAShapeLayer в clearColor,

shapeLayer.fillColor = UIColor.clearColor().CGColor

Это дает мне следующий результат:

Измените свойство lineJoinStyle вашего пути или используйте метод addCurveToPoint:.

Другие вопросы по тегам