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

时间:2016-03-07 17:44:23

标签: ios swift uibezierpath cashapelayer

我有一个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()

Without path.moveToPoint()

  

没有path.moveToPoint()

With path.moveToPoint()

2 个答案:

答案 0 :(得分:1)

在for循环中没有moveToPoint是正确的方法。

如果在for循环中使用moveToPoint,则会为路径的每个部分创建一个新的线段,因此它看起来是断开的。

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

您只需将fillColor的{​​{1}}设置为CAShapeLayer即可解决此问题。

clearColor

这给了我以下结果:

enter image description here

答案 1 :(得分:0)

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