Search code examples
iosswiftcalayercashapelayerquartz-core

Swift shapelayer set fill color not worked


I try to fill shapelayer with parallelogram path.

let shapeLayer = CAShapeLayer()

    shapeLayer.lineWidth = 2.0
    shapeLayer.fillColor = UIColor.blue.cgColor
    shapeLayer.strokeColor = UIColor.black.cgColor
    let path = CGMutablePath()
    let points: [CGPoint] = [CGPoint(x: 10, y: 10), CGPoint(x: 100, y: 20), CGPoint(x: 100, y: 100), CGPoint(x:10, y: 80)]
    for (index, point) in points.enumerated() {
        path.move(to: point)
        var line: CGPoint = .zero
        if index == points.count - 1 {
            line = points[0]
        } else {
            line = points[index+1]
        }
        path.addLine(to: line)
    }

    shapeLayer.path = path

   layer.addSublayer(shapeLayer)

But on screen I see only black border of that parallelogram. I worked with filling shapelayers earlier and it worked ok for more difficult paths. Can anyone suggest me to fix this error.


Solution

  • You don't need to move point every time.

        // ...
    
        path.move(to: points[0])
    
        for index in 0..<points.count {
            var point: CGPoint = .zero
            if index == points.count - 1 {
                point = points[0]
            } else {
                point = points[index+1]
            }
            path.addLine(to: point)
        }
    
        //...