Ios 相交UIBezierPath上的填充路径

Ios 相交UIBezierPath上的填充路径,ios,iphone,swift,Ios,Iphone,Swift,你知道怎么填充这里所有的路径吗。目前正在发生的是,我在视图上绘制一个矩形路径,然后在中间添加小圆圈,但如果圆圈和矩形相交,则显示白色填充颜色。我想要的是仍然显示渐变层。有什么帮助吗?我现在的代码如下 如果不使用evenOdd填充规则,会发生什么情况?似乎切换path.usesevenodFillRule对我的案例没有任何作用您是否也删除了fillLayer.fillRule=kCAFillRuleEvenOdd?在您的情况下,path.usesEventOddFillRule无论如何都不做任何事

你知道怎么填充这里所有的路径吗。目前正在发生的是,我在视图上绘制一个矩形路径,然后在中间添加小圆圈,但如果圆圈和矩形相交,则显示白色填充颜色。我想要的是仍然显示渐变层。有什么帮助吗?我现在的代码如下


如果不使用evenOdd填充规则,会发生什么情况?似乎切换path.usesevenodFillRule对我的案例没有任何作用您是否也删除了
fillLayer.fillRule=kCAFillRuleEvenOdd
?在您的情况下,
path.usesEventOddFillRule
无论如何都不做任何事情。它仅在使用路径对象进行CG绘制时才相关。(例如
path.fill()
)删除fillLayer.fillRule=kCAFillRuleEvenOdd只会使整个视图变为白色。禁用偶数奇数,并将
let path=UIBezierPath(roundedRect:…)
更改为
let path=UIBezierPath()
如果不使用evenOdd填充规则,会发生什么情况?似乎切换path.usesEvenOddFillRule对我的案例没有任何作用您是否也删除了
fillLayer.fillRule=kCAFillRuleEvenOdd
?在您的情况下,
path.usesEventOddFillRule
无论如何都不做任何事情。它仅在使用路径对象进行CG绘制时才相关。(例如
path.fill()
)删除fillLayer.fillRule=kCAFillRuleEvenOdd只会使整个视图变为白色。禁用偶数,并将
let path=UIBezierPath(roundedRect:…)
更改为
let path=UIBezierPath()
    func addGradientLayer() {
        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = bounds

        let startColor = UIColor.create(withHexOrName: OurPayStatesViewUX.GradientColorStart)
        let endColor = UIColor.create(withHexOrName: OurPayStatesViewUX.GradientColorEnd)

        gradientLayer.colors = [startColor.CGColor, endColor.CGColor]
        gradientLayer.startPoint = CGPoint(x: 0, y: 0)
        gradientLayer.endPoint = CGPoint(x: 1, y: 0)
        layer.insertSublayer(gradientLayer, atIndex: 0)
    }

    func createOverlay(view: UIView, circleLocations: [CGPoint]) {

        maskLayer?.removeFromSuperlayer()

        let radius: CGFloat = view.frame.height/2
        let path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: view.bounds.size.width, height: view.bounds.size.height), cornerRadius: 0)

        for i in circleLocations {
            // Create a circle path in each of the state views
            let circlePath = UIBezierPath(roundedRect: CGRect(x: i.x, y: i.y, width: 2 * radius, height: 2 * radius), cornerRadius: radius)
            path.appendPath(circlePath)
        }

        let rect = createRectangle(startPointX: 0, endPointX: view.bounds.size.width)
        path.appendPath(rect)

        path.usesEvenOddFillRule = true

        let fillLayer = CAShapeLayer()
        fillLayer.path = path.CGPath
        fillLayer.fillRule = kCAFillRuleEvenOdd
        fillLayer.fillColor = backgroundColor?.CGColor ?? UIColor.whiteColor().CGColor
        fillLayer.opacity = 1

        maskLayer = fillLayer
        layer.addSublayer(fillLayer)
    }

    func createRectangle(startPointX startPointX: CGFloat, endPointX: CGFloat) -> UIBezierPath {
        let rectHeight: CGFloat = 6
        let path = UIBezierPath(rect: CGRect(x: startPointX, y: frame.height/2 - rectHeight/2, width: endPointX - startPointX, height: rectHeight))

        return path
    }