我无法得到一个圆弧来填充 Swift 4

I can't get an arc to fill in Swift 4

我有一个 class 可以制作一个圆形的 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()
        }
    }


}

如果您查看 strokePath() 的文档:

The current path is cleared as a side effect of calling this function.

基本上,在抚摸完你的路径后,你的路径被重置,没有什么可填充的。

解决方法是先保存 context.path,然后再使用 context.addPath(path)。但是,我通常更喜欢先构建一个单独的CGMutablePath,然后再将其添加到上下文中。

这更容易用 UIBezierPath 解决。

override func draw(_ rect: CGRect) {
    let path = UIBezierPath(ovalIn: bounds)
    path.lineWidth = 1
    UIColor.red.setStroke()
    UIColor.black.setFill()
    path.fill()
    path.stroke()
}