如何使用多个 CGPoint 添加单个平滑线 Swift 2.0

How to add a single smooth line with multiple 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)
}

With path.moveToPoint()

Without path.moveToPoint()

更改路径的 lineJoinStyle 属性 或使用 addCurveToPoint: 方法。

在 for 循环中不使用 moveToPoint 是正确的方法。

如果您在 for 循环中使用 moveToPoint,您将为路径的每个部分创建一个新的线段,这就是它看起来断开连接的原因。

第一张图片中的“背景中的黑线”只是CAShapeLayer试图填充路径覆盖的区域。

您可以通过简单地将 CAShapeLayerfillColor 设置为 clearColor 来解决这个问题。

shapeLayer.fillColor = UIColor.clearColor().CGColor

这给了我以下结果: