Я не могу получить дугу, чтобы заполнить Swift 4 - PullRequest
0 голосов
/ 26 октября 2018

У меня есть класс, который делает UIView круга. Когда я добавляю кружок к своему виду, он показывает красный контур, но внутри он чистый, а не черный. Я хочу, чтобы он имел черную заливку.

class CircleView: UIView {

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = UIColor.clear
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }


    override func draw(_ rect: CGRect) {
        if let context = UIGraphicsGetCurrentContext() {

            context.setLineWidth(1.0);

            UIColor.red.set()

            let center = CGPoint(x: frame.size.width/2, y: frame.size.height/2)
            let radius = (frame.size.width - 10)/2
            context.addArc(center: center, radius: radius, startAngle: 0.0, endAngle: .pi * 2.0, clockwise: true)

            context.strokePath()
            context.closePath()
            context.setFillColor(UIColor.black.cgColor)
            context.fillPath()
        }
    }


}

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Это легче решить с помощью UIBezierPath.

override func draw(_ rect: CGRect) {
    let path = UIBezierPath(ovalIn: bounds)
    path.lineWidth = 1
    UIColor.red.setStroke()
    UIColor.black.setFill()
    path.fill()
    path.stroke()
}
0 голосов
/ 26 октября 2018

Если вы посмотрите документацию strokePath () :

Текущий путь очищается как побочный эффект вызова этой функции.

По сути, после обводки вашего пути ваши пути сбрасываются, и заполнять нечего.

Обходным путем может быть сначала сохранить context.path, а затем использовать context.addPath(path).Однако я обычно предпочитаю сначала создать отдельный CGMutablePath, а затем добавить его в контекст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...