Я пытаюсь заполнить слой формы параллелограммным путем.

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)

Но на экране я вижу только черную рамку этого параллелограмма. Раньше я работал с заливкой shapelayers, и это нормально работало для более сложных путей. Может ли кто-нибудь предложить мне исправить эту ошибку.

0
juramoshkov 20 Июн 2017 в 10:34

1 ответ

Лучший ответ

Вам не нужно каждый раз перемещать точку.

    // ...

    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)
    }

    //...
2
ovo 20 Июн 2017 в 12:34
О, спасибо, отлично, работает. Но почему появляется ошибка, когда я перемещаю точку?
 – 
juramoshkov
20 Июн 2017 в 14:16
The specified point becomes the start point of a new subpath. The current point is set to this start point. Думаю, суть может быть в предложении из документа Apple.
 – 
ovo
21 Июн 2017 в 05:13
Ты спас мне день ... Спасибо!
 – 
kikettas
10 Авг 2018 в 18:11