我正在尝试一个简单的填充,两个具有相同半径的交叉圆圈,并且单独填充交叉点。下面是我试过的
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 1.0);
CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
CGContextSetStrokeColorWithColor(context, [UIColor yellowColor].CGColor);
// Draw first circle
CGContextAddArc(context, 150, 150, 50, 0, 2 * M_PI, 1);
CGContextStrokePath(context);
// Draw second circle
CGContextAddArc(context, 200, 150, 50, 0, 2 * M_PI, 1);
CGContextEOClip(context);
CGContextFillPath(context);
}
我的代码甚至没有在上下文中呈现第二个圆圈。我在论坛中经历了很多与CGContextClip相关的问题,但大多数都在他们的样本中使用了CGPath。只能剪裁CG路径?任何建议或想法都表示赞赏。
谢谢
答案 0 :(得分:2)
函数CGContextStrokePath()
,CGContextEOClip()
和CGContextFillPath()
都清除了当前的路径。因此,最终的CGContextFillPath()
无法填充。
现在,以下代码可用于绘制圆圈的交集:
// Use first circle as clipping path:
CGContextAddArc(context, 150, 150, 50, 0, 2 * M_PI, 1);
CGContextClip(context);
// Draw second circle:
CGContextAddArc(context, 200, 150, 50, 0, 2 * M_PI, 1);
CGContextFillPath(context);
更新:以下代码填充并描绘交集:
CGContextSaveGState(context);
CGContextAddArc(context, 150, 150, 50, 0, 2 * M_PI, 1);
CGContextClip(context);
CGContextAddArc(context, 200, 150, 50, 0, 2 * M_PI, 1);
CGContextDrawPath(context, kCGPathFillStroke);
CGContextRestoreGState(context);
CGContextAddArc(context, 200, 150, 50, 0, 2 * M_PI, 1);
CGContextClip(context);
CGContextAddArc(context, 150, 150, 50, 0, 2 * M_PI, 1);
CGContextDrawPath(context, kCGPathStroke);
(不起作用的原始代码:)
要填充并描绘路径,请使用CGContextDrawPath()
:
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 1.0);
CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
CGContextSetStrokeColorWithColor(context, [UIColor yellowColor].CGColor);
CGContextAddArc(context, 150, 150, 50, 0, 2 * M_PI, 1);
CGContextAddArc(context, 200, 150, 50, 0, 2 * M_PI, 1);
CGContextDrawPath(context, kCGPathEOFillStroke);
答案 1 :(得分:0)
你试过这个吗?
- (UIImage *)colorImage:(UIImage *)origImage withColor:(UIColor *)color
{
UIGraphicsBeginImageContextWithOptions(origImage.size, YES, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, (CGRect){ {0,0}, origImage.size} );
CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, origImage.size.height);
CGContextConcatCTM(context, flipVertical);
CGContextDrawImage(context, (CGRect){ pt, origImage.size }, [origImage CGImage]);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
您也可以尝试Flood Fill