如何在iOS中将两个矩形相交?

时间:2018-12-15 12:17:38

标签: ios swift cgrect

我想删除“蓝色”圆圈,只是有一个“空心”中心(所以只有红色层,您可以看到里面的背景)。用clear颜色填充内部无效。

class AddButtonView: UIView {

    override func draw(_ rect: CGRect) {
        super.draw(rect)
        // Outer circle
        UIColor.red.setFill()
        let outerPath = UIBezierPath(ovalIn: rect)
        outerPath.fill()

        // Center circle
        UIColor.blue.setFill()
        let centerRect = rect.insetBy(dx: rect.width * 0.55 / 2, dy: rect.height * 0.55 / 2)
        let centerPath = UIBezierPath(ovalIn: centerRect)
        centerPath.fill()
    }
}

我该怎么办? intersects什么也没做。

enter image description here

1 个答案:

答案 0 :(得分:1)

override func draw(_ rect: CGRect) {
    super.draw(rect)

    // Outer circle
    UIColor.red.setFill()
    let outerPath = UIBezierPath(ovalIn: rect)
    outerPath.fill()

    guard let context = UIGraphicsGetCurrentContext() else { return }

    context.saveGState()
    context.setBlendMode(.destinationOut)

    // Center circle
    UIColor.blue.setFill()
    let centerRect = rect.insetBy(dx: rect.width * 0.55 / 2, dy: rect.height * 0.55 / 2)
    let centerPath = UIBezierPath(ovalIn: centerRect)
    centerPath.fill()

    context.restoreGState()
}

请不要忘记为视图提供backgroundColor的{​​{1}},并将其.clear属性设置为isOpaque

Draw transparent UIBezierPath line inside drawRect的启发。

结果: result