我有一个CGPathRef
形状奇特的多边形。我需要将 alpha 应用到此路径之外的区域。这很简单。
CGContextAddPath(context, crazyPolygon);
CGContextSetFillColor(context, someAlphaColor);
CGContextEOFillPath(context);
我需要用圆圈做类似的事情,也很简单。
CGMutablePathRef circlePath = CGPathCreateMutable();
CGPathAddRect(circlePath, NULL, rect);
CGPathAddEllipseInRect(circlePath, NULL, circleBox);
CGContextAddPath(context, circlePath);
CGContextSetFillColor(context, someAlphaColor);
CGContextEOFillPath(context);
当我尝试使这两个形状相交时,问题就出现了。我想将 alpha 应用于不在两个形状内的任何像素。
- 如果该点在圆内但不在多边形内,则应用 alpha。
- 如果它在多边形中但不在圆形中,则应用 alpha。
- 如果它同时在多边形和圆形中,则像素应该是完全透明的。
我尝试了很多不同的方法。没有一个工作。最有希望的是用多边形创建一个蒙版,并用CGContextClipToMask
它来限制圆的绘制。整个圆圈是在没有剪裁的情况下绘制的。