我需要使用'reverted polygon'在drawRect()方法中填充我的UIView - 视图中的所有内容都填充了除多边形本身之外的一些颜色。
我有这个代码来绘制一个简单的多边形:
CGContextBeginPath(context);
for(int i = 0; i < corners.count; ++i)
{
CGPoint cur = [self cornerAt:i], next = [self cornerAt:(i + 1) % corners.count];
if(i == 0)
CGContextMoveToPoint(context, cur.x, cur.y);
CGContextAddLineToPoint(context, next.x, next.y);
}
CGContextClosePath(context);
CGContextFillPath(context);
我发现了类似的问题,但在C#中,不是Obj-C:c# fill everything but GraphicsPath
答案 0 :(得分:3)
可能最快的方法是设置剪辑:
// create your path as posted
// but don't fill it (remove the last line)
CGContextAddRect(context, self.bounds);
CGContextEOClip(context);
CGContextSetRGBFillColor(context, 1, 1, 0, 1);
CGContextFillRect(context, self.bounds);
其他答案都建议首先填充矩形,然后在顶部绘制颜色清晰的形状。两者都省略了必要的混合模式。这是一个工作版本:
CGContextSetRGBFillColor(context, 1, 1, 0, 1);
CGContextFillRect(context, self.bounds);
CGContextSetBlendMode(context, kCGBlendModeClear);
// create and fill your path as posted
修改:这两种方法都要求将backgroundColor
clearColor
和opaque
设置为NO。
第二次编辑:最初的问题是关于Core Graphics。当然还有其他方法来掩盖视图的一部分。最值得注意的是CALayer
mask
属性。
您可以将此属性设置为包含剪辑路径的CAPathLayer实例,以创建模板效果。
答案 1 :(得分:0)
self.backgroundColor = [UIcolor redColor]; //set ur color
然后按照你的方式画一个多边形。
CGContextBeginPath(context);
for(int i = 0; i < corners.count; ++i)
{
CGPoint cur = [self cornerAt:i], next = [self cornerAt:(i + 1) % corners.count];
if(i == 0)
CGContextMoveToPoint(context, cur.x, cur.y);
CGContextAddLineToPoint(context, next.x, next.y);
}
CGContextClosePath(context);
CGContextFillPath(context);
希望它有所帮助......快乐的编码:)
答案 2 :(得分:0)
创建一个新的CGLayer,用外部颜色填充它,然后使用清晰的颜色绘制多边形。
layer1 = CGLayerCreateWithContext(context, self.bounds.size, NULL);
context1 = CGLayerGetContext(layer1);
[... fill entire layer ...]
CGContextSetFillColorWithColor(self.context1, [[UIColor clearColor] CGColor]);
[... draw your polygon ...]
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawLayerAtPoint(context, CGPointZero, layer1);