带有反向路径的 UIBezierPath 的 UIView

UIView with UIBezierPath with reversing path

我正在尝试使用 UIBezierPathaddCurve() 方法在底部视图中提供一些遮罩。

预期结果

当前输出

我试过的是:

        viewHeader.backgroundColor = headerColor
        let path = UIBezierPath()
        let cpoint1 = CGPoint(x: 80, y: 160)
        let cpoint2 = CGPoint(x: 280, y: viewHeader.Height + 50)
        path.move(to:.init(x: 0, y: viewHeader.Height + 10))
        path.addCurve(to: .init(x: viewHeader.Width, y: 205), controlPoint1: cpoint1, controlPoint2: cpoint2)
        let shapeLayer = CAShapeLayer()
        shapeLayer.path = path.reversing().cgPath
        shapeLayer.fillColor = headerColor?.cgColor
        shapeLayer.strokeColor =  UIColor.black.cgColor
        shapeLayer.lineWidth = 1.0
        viewHeader.layer.addSublayer(shapeLayer)

希望对你有用,祝你愉快。

func drawLine() {
    let headerColor = UIColor.red
    let path = UIBezierPath()
    let cpoint1 = CGPoint(x: viewHeader.frame.width/4, y: 160)
    let cpoint2 = CGPoint(x: viewHeader.frame.width*3/4, y: viewHeader.frame.height + 50)
    path.move(to:.init(x: 0, y: 0))
    path.addLine(to:.init(x: 0, y: viewHeader.frame.height - 50))
    path.addCurve(to: .init(x: viewHeader.frame.width, y: viewHeader.frame.height - 50), controlPoint1: cpoint1, controlPoint2: cpoint2)
    path.addLine(to: CGPoint(x: viewHeader.frame.width, y: 0))
    path.addLine(to: CGPoint(x: 0, y: 0))
    path.close()
    let shapeLayer = CAShapeLayer()
    shapeLayer.path = path.reversing().cgPath
    shapeLayer.fillColor = headerColor.cgColor
    shapeLayer.strokeColor =  headerColor.cgColor
    shapeLayer.lineWidth = 1.0
    viewHeader.layer.addSublayer(shapeLayer)
}