我是Objective-C和iOS开发的新手。我有一些视图,其中一些数字是由核心绘图绘制的。现在我想用颜色填充这些形状,我不知道形状的路径或上下文。 Objective-C是否具有泛洪填充或放置像素等功能,因此只有笔触颜色,我可以在视图中填充任何形状。
-(void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 4.0);
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CGFloat components[] = {1.0, 0.0, 0.0, 1.0};
CGColorRef color = CGColorCreate(colorspace, components);
CGContextSetStrokeColorWithColor(context, color);
CGContextMoveToPoint(context, 50, 0);
CGContextAddLineToPoint(context, 0,320);
CGContextStrokePath(context);
CGColorSpaceRelease(colorspace);
CGColorRelease(color);
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGContextSetRGBFillColor(context, 0, 255, 0, 1.0);
CGContextMoveToPoint(context, 100, 100);
CGContextAddLineToPoint(context, 150, 150);
CGContextAddLineToPoint(context, 100, 200);
CGContextAddLineToPoint(context, 50, 150);
CGContextAddLineToPoint(context, 100, 100);
CGContextStrokePath(context);
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGRect rectangle = CGRectMake(60,170,200,80);
CGContextAddEllipseInRect(context, rectangle);
CGContextStrokePath(context);
}
这将形成一个圆形和一个具有一些共同区域的正方形。当用户点击该区域时,我希望特定区域填充颜色。
答案 0 :(得分:2)
所以你正在寻找目标C中的洪水填充。
这是我实施的扫描线泛光填充算法。
Github : UIImageScanlineFloodfill
如果你想学习洪水填充的基本知识:
Lode's Computer Graphics Tutorial Flood Fill
我希望这会对你有所帮助。
答案 1 :(得分:0)
将您的绘图代码放入问题中,我可以给您一个具体的答案。
通常您只需要使用
设置填充颜色[[UIColor redColor] setFill];
您绘制核心图形的任何形状都将自动填充该颜色。
答案 2 :(得分:0)
尝试此命令: -
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
答案 3 :(得分:0)
Core Graphics与UIView
及其drawRect:
方法紧密相关,并具有C接口。正如您所指出的,您总是在当前图形上下文中绘制。我可以想到两种方法:(1)当用户点击myView
时,设置类似myView.pointTapped
的属性,并在drawRect:
中找到要填充的形状,设置填充颜色和填充使用 GGGeometry 方法的闭合路径。
有一个客观的C选择:(2)看看UIBezierPath
。它不像在Core Graphics中绘图那么全面,但可以在ViewController
实现中使用。