我试图动态地创建拼图,它看起来如下:

我想用一些颜色填充这个形状,所以它看起来如下:

所以我可以用它掩盖一些图像。
问题:I使用4 UIBezierPath创建此形状,然后使用appendPath将其转换为1路径。
我想填充这条路径,但是当我使用fill时,我得到了以下内容:

你知道我如何填充相同的形状吗?
发布于 2012-09-07 10:11:27
过了一段时间,我找到了得到这些结果的原因。如果您想要创建一些用于填充的路径,则不应该使用moveToPoint方法,而是应该使用moveToPoint设置第一个点,然后使用addLineToPoint、addCurveToPoint等绘制所有线条。
完成绘制路径后,不要忘记发送closePath消息。
在我知道这一点之前,我使用不同的UIBezierPath实例绘制了拼图的每一面,对于使用moveToPoint设置的每一条路径,我都画了第一个点。
发布于 2012-09-05 10:35:13
如果你有一条路径定义你的拼图,如果你把它变成一个CAShapeLayer,就会更容易操作它。
CAShapeLayer *myShapeLayer = [CAShapeLayer layer];
myShapeLayer.path = myBezierCurves.CGPath;
myShapeLayer.fillColor = [[UIColor blackColor] CGColor];
myShapeLayer.strokeColor = [[UIColor redColor] CGColor];
myShapeLayer.lineWidth = 2;发布于 2012-09-05 10:35:13
尝试这样做:意图使一个UIbenzierPath包含所有的组合点
在.m文件中添加下面的方法。
void MyCGPathApplierFunc (void *info, const CGPathElement *element) {
UIBezierPath *drawingPath = (UIBezierPath *)info;
CGPoint *points = element->points;
CGPathElementType type = element->type;
switch(type) {
case kCGPathElementMoveToPoint: // contains 1 point
[drawingPath moveToPoint:[[NSValue valueWithCGPoint:points[0]] CGPointValue]];
break;
case kCGPathElementAddLineToPoint: // contains 1 point
[drawingPath addLineToPoint:[[NSValue valueWithCGPoint:points[0]] CGPointValue]];
break;
case kCGPathElementAddQuadCurveToPoint: // contains 1 point
[drawingPath addQuadCurveToPoint:[[NSValue valueWithCGPoint:points[0]] CGPointValue]];
break;
case kCGPathElementAddCurveToPoint: // contains 1 point
[drawingPath addCurveToPoint:[[NSValue valueWithCGPoint:points[0]] CGPointValue]];
break;
case kCGPathElementCloseSubpath: // contains no point
break;
}
}添加UIBezierPath *组合路径;在.h文件中,您可以使用如下方法:
combinedpath = [[UIBezierPath alloc]init];
CGPathApply(appendedBenzierPath.CGPath, (void *)combinedpath, MyCGPathApplierFunc);
[self setNeedsDisplay];现在填写这些组合路径
- (void)drawRect:(CGRect)rect
{
[[UIColor blackColor] setStroke];
[combinedpath strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];
[combinedpath fill];
}https://stackoverflow.com/questions/12279271
复制相似问题