UIBezierPath 在封闭区域内填充

UIBezierPath fill inside closed area

我想知道我是否可以填充我使用 UIBezierPath 绘制的封闭区域。

这是我用来在 UIButton:

中绘制不规则形状的代码
import UIKit

@IBDesignable class DrawingBox : UIButton {
    
    let strokeColor : UIColor = .systemBlue
    let fillColor : UIColor = .purple
    let clearColor : UIColor = .clear
    
    override func draw(_ rect: CGRect) {
        clipsToBounds = true
        
        strokeColor.setStroke()
        fillColor.setFill()
        
        let bp = UIBezierPath(rect: rect)
        bp.lineWidth = 6.0
        
        bp.move(to: p(50, 50))
        
        bp.addLine(to: p(100, 20))
        bp.addLine(to: p(200, 50))
        bp.addLine(to: p(300, 70))
        bp.addLine(to: p(240, 150))
        bp.addLine(to: p(140, 100))
        bp.close()
        bp.stroke()
                
        bp.fill(with: CGBlendMode.colorDodge, alpha: 1.0)
    }
    
    private func p(_ x: CGFloat, _ y: CGFloat) -> CGPoint {
        return CGPoint(x: x, y: y)
    }
}

产生这种效果的:

这几乎就是我想要的;我希望填充仅发生在我绘制的形状内。我注意到如果我只说 bp.fill() 整个视图就会充满紫色。感谢所有指点,谢谢。

像这样启动空的 UIBezierPath

let bp = UIBezierPath()

你会得到这个输出