绘制一个多边形的多边形用于描边,另一个用于填充?

Mor*_*lde 7 objective-c uiview cgcontext ios

我在绘制一些用颜色描边的线条然后用另一条线填充它们的内部(它们形成一个多边形)时遇到了麻烦.

UIColor *houseBorderColor = [UIColor colorWithRed:(170/255.0) green:(138/255.0) blue:(99/255.0) alpha:1];
CGContextSetStrokeColorWithColor(context, houseBorderColor.CGColor);
CGContextSetLineWidth(context, 3);

// Draw the polygon
CGContextMoveToPoint(context, 20, viewHeight-19.5);
CGContextAddLineToPoint(context, 200, viewHeight-19.5); // base
CGContextAddLineToPoint(context, 300, viewHeight-119.5); // right border
CGContextAddLineToPoint(context, 120, viewHeight-119.5);
CGContextAddLineToPoint(context, 20, viewHeight-19.5);

// Fill it
CGContextSetRGBFillColor(context, (248/255.0), (222/255.0), (173/255.0), 1);
//CGContextFillPath(context);

// Stroke it
CGContextStrokePath(context);
Run Code Online (Sandbox Code Playgroud)

随着CGContextStrokePath注释,我得到这个结果:

在此输入图像描述

但是,如果我取消注释CGContextStrokePath并填充多边形,颜色会溢出笔划:

在此输入图像描述

你如何实现这样的结果(无需重做整个绘图程序两次):

在此输入图像描述

Mar*_*n R 18

您可以使用

CGContextDrawPath(context, kCGPathFillStroke);
Run Code Online (Sandbox Code Playgroud)

代替

CGContextFillPath(context);
CGContextStrokePath(context);
Run Code Online (Sandbox Code Playgroud)

问题是,无论CGContextFillPath()CGContextStrokePath(context) 清除当前路径,因此,只有第一操作成功,第二操作绘制任何东西.CGContextDrawPath()结合填充和描边而不清除其间的路径.

  • 对不起,答案很短,因为我在打电话:-)该调用取代了CGContextFillPath和... StrokePath. (3认同)

Mik*_*ard 5

使用UIBezierPath,您可以这样做:

UIBezierPath *path = [[UIBezierPath alloc] init];
[path moveToPoint:CGPointMake(20, viewHeight-19.5)];
[path addLineToPoint:CGPointMake(200, viewHeight-19.5)];
[path addLineToPoint:CGPointMake(300, viewHeight-119.5)];
[path addLineToPoint:CGPointMake(120, viewHeight-119.5)];
[path addLineToPoint:CGPointMake(20, viewHeight-19.5)];

[[UIColor colorWithRed:(248/255.0) green:(222/255.0) blue:(173/255.0) alpha:1.0] setFill];
[path fill];
[[UIColor colorWithRed:(170/255.0) green:(138/255.0) blue:(99/255.0) alpha:1.0] setStroke];
[path stroke];
Run Code Online (Sandbox Code Playgroud)

  • 我认为使用NSObjects而不是Core Foundation对象具有所有常见的优点. (2认同)