首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >填充UIBezierPath

填充UIBezierPath
EN

Stack Overflow用户
提问于 2012-09-05 10:20:45
回答 3查看 2.6K关注 0票数 2

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

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

所以我可以用它掩盖一些图像。

问题:I使用4 UIBezierPath创建此形状,然后使用appendPath将其转换为1路径。

我想填充这条路径,但是当我使用fill时,我得到了以下内容:

你知道我如何填充相同的形状吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-07 10:11:27

过了一段时间,我找到了得到这些结果的原因。如果您想要创建一些用于填充的路径,则不应该使用moveToPoint方法,而是应该使用moveToPoint设置第一个点,然后使用addLineToPointaddCurveToPoint等绘制所有线条。

完成绘制路径后,不要忘记发送closePath消息。

在我知道这一点之前,我使用不同的UIBezierPath实例绘制了拼图的每一面,对于使用moveToPoint设置的每一条路径,我都画了第一个点。

票数 6
EN

Stack Overflow用户

发布于 2012-09-05 10:35:13

如果你有一条路径定义你的拼图,如果你把它变成一个CAShapeLayer,就会更容易操作它。

代码语言:javascript
复制
CAShapeLayer *myShapeLayer = [CAShapeLayer layer];
myShapeLayer.path = myBezierCurves.CGPath;
myShapeLayer.fillColor = [[UIColor blackColor] CGColor];

myShapeLayer.strokeColor = [[UIColor redColor] CGColor];
myShapeLayer.lineWidth = 2;
票数 1
EN

Stack Overflow用户

发布于 2012-09-05 10:35:13

尝试这样做:意图使一个UIbenzierPath包含所有的组合点

在.m文件中添加下面的方法。

代码语言:javascript
复制
 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文件中,您可以使用如下方法:

代码语言:javascript
复制
combinedpath = [[UIBezierPath alloc]init];
CGPathApply(appendedBenzierPath.CGPath, (void *)combinedpath, MyCGPathApplierFunc);
[self setNeedsDisplay];

现在填写这些组合路径

代码语言:javascript
复制
- (void)drawRect:(CGRect)rect
{
  [[UIColor blackColor] setStroke];
  [combinedpath strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];
  [combinedpath fill];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12279271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档