2 UIBezierPath的绘制差异

Drawing differences of 2 UIBezierPath

我想绘制 2 个 UIBezierPath 之间的差异(参见屏幕截图)以便仅绘制圆角,如您在我的屏幕截图(图 C)中所见

这是我的代码:

let context = UIGraphicsGetCurrentContext()
CGContextSaveGState(context)

let rectanglePath = UIBezierPath(rect: rect)
CGContextAddPath(context, rectanglePath.CGPath)
CGContextEOClip(context)

let roundedRectanglePath = UIBezierPath(roundedRect: productRect, byRoundingCorners: roundedCorners, cornerRadii: CGSize(width: 6, height: 6))
CGContextAddPath(context, roundedRectanglePath.CGPath)
CGContextFillPath(context)

CGContextRestoreGState(context)

很遗憾,它不起作用。我只画圆角的黑色矩形。

你有什么想法吗?

非常感谢。

您可以使用一种路径:

let path = UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius)
path.append(UIBezierPath(rect: bounds))
path.usesEvenOddFillRule = true

UIColor.black.setFill()
path.fill()

或者您可以使用 CoreGraphics:

let path = UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius)
path.append(UIBezierPath(rect: bounds))

let context = UIGraphicsGetCurrentContext()!
context.addPath(path.cgPath)
context.setFillColor(UIColor.black.cgColor)
context.fillPath(using: .evenOdd)

结果:

请参阅此答案的 previous revision 以获得 Swift 2 版本。