С помощью strokeColor линия рисуется от центра к окружности - PullRequest
0 голосов
/ 06 мая 2018



Я использую Swift 4.
Я написал код ниже и попытался нарисовать круг штрихом.
Однако с помощью приведенного ниже кода я не смог нарисовать желаемый круг.
Проблема заключается в том, что линия проходит от центра круга к внешней периферии
(строго говоря, к координатной точке свойства startAngle).

Я хочу стереть строку, что мне делать?

(Я подготовил изображение.)

class Something{

    var line:[CAShapeLayer] = []
    var path:[UIBezierPath] = []

    func drawingNow(){
            let layer = CAShapeLayer()
            self.layer.addSublayer(layer)
            self.line.append(layer)

            let addPath: UIBezierPath = UIBezierPath()
            addPath.move(to: CGPoint(x: 100, y: 100))
            addPath.addArc(
                withCenter: CGPoint(x: 100, y: 100),
                radius: CGFloat(50),
                startAngle: CGFloat(//someangle),
                endAngle: CGFloat(//someangle),
                clockwise: true
            )

            self.path.append(addPath)

            //self.line.last!.strokeColor = etc... (If don't use "override func draw()")
            self.line.last!.fillColor = UIColor.clear.cgColor
            self.line.last!.path = addPath.cgPath

            self.setNeedsDisplay()
    }

    override func draw(_ rect: CGRect) {
        if self.path.count != 0{
            UIColor.orange.setStroke()
            self.path.last!.stroke()
        }
    }
}

Изображение

1 Ответ

0 голосов
/ 06 мая 2018

После вызова addPath.move(to: CGPoint(x: 100, y: 100)) UIBezierPath переместился в указанную координату. Теперь вы говорите, что добавьте дугу оттуда с центром (100, 100). Чтобы нарисовать дугу с центром (100, 100), сначала нужно сместиться к окружности. Но в этот момент он уже начинает рисовать! Вот как работает addArc. То же самое касается addLine. Посмотрите на документы :

Этот метод добавляет указанную дугу, начиная с текущей точки.

Таким образом, дуга всегда начинается в текущей точке (100, 100).

Вместо того, чтобы указывать ему сначала двигаться в центр, просто скажите, чтобы он нарисовал дугу, удалив линию перемещения (к:).

...