1

我是 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);
}

这将制作一个带有一些公共区域的圆形和方形。当用户点击该区域时,我希望特定区域填充颜色。

4

4 回答 4

2

所以你正在寻找目标 C 中的洪水填充。

这是我的扫描线洪水填充算法的实现。

Github:UIImageScanlineFloodfill

如果您想学习洪水填充的基础知识:

Lode 的计算机图形学教程洪水填充

我希望这能帮到您。

于 2013-07-18T13:49:35.633 回答
0

把你的绘图代码放在问题中,我可以给你一个具体的答案。

通常,您只需要使用设置填充颜色

[[UIColor redColor] setFill];

您绘制核心图形的任何形状都将自动填充该颜色。

于 2012-02-04T10:03:09.617 回答
0

试试这个命令: -

  CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
于 2012-02-04T10:23:55.590 回答
0

UIViewCore Graphics与其方法密切相关,drawRect:并具有 C 接口。正如您所指出的,您始终在当前图形上下文中进行绘制。我可以想到两种方法:(1)当用户点击myView时,设置一个属性,如myView.pointTapped,并在drawRect:找到要填充的形状中,设置填充颜色,并使用GGGeometry方法填充闭合路径。

有一个 Objective-C 替代方案:(2) 看看UIBezierPath. 它不像 Core Graphics 中的绘图那样全面,但可以在您的ViewController实现中使用。

于 2012-02-04T16:48:35.010 回答