如何使用多个 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
试图填充路径覆盖的区域。
您可以通过简单地将 CAShapeLayer
的 fillColor
设置为 clearColor
来解决这个问题。
shapeLayer.fillColor = UIColor.clearColor().CGColor
这给了我以下结果:
我有一个接受 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
试图填充路径覆盖的区域。
您可以通过简单地将 CAShapeLayer
的 fillColor
设置为 clearColor
来解决这个问题。
shapeLayer.fillColor = UIColor.clearColor().CGColor
这给了我以下结果: