加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 将多个CGPath合并在一起以创建一条路径

发布时间:2020-12-16 05:29:25 所属栏目:百科 来源:网络整理
导读:我使用几个CGRects和Ellipses做一个复杂的形状.一旦创建了路径,我就想打破这条路.当我敲击路径时,它会触发每个形状.有没有办法可以将每个形状合并成单个路径,所以笔画不相交? int thirds = self.height / 3;CGPathRef aPath = CGPathCreateMutable();CGRect
我使用几个CGRects和Ellipses做一个复杂的形状.一旦创建了路径,我就想打破这条路.当我敲击路径时,它会触发每个形状.有没有办法可以将每个形状合并成单个路径,所以笔画不相交?
int thirds = self.height / 3;

CGPathRef aPath = CGPathCreateMutable();

CGRect rectangle = CGRectMake((58 - 10) / 2,46,10,self.height - 58);
CGPathAddRect(aPath,nil,rectangle);

CGPathAddEllipseInRect(aPath,CGRectMake((58 - 48) / 2,48,48));
CGPathAddEllipseInRect(aPath,thirds,thirds * 2,CGRectMake(0,self.height - 58,58,58));
CGPathCloseSubpath(aPath);
CGPathRef other = CGPathCreateCopy(aPath);

CAShapeLayer *square = [CAShapeLayer layer];
square.fillColor = [UIColor colorWithRed:36/255.0f green:56/255.0f blue:82/255.0f alpha:1.0f].CGColor;
square.strokeColor = [UIColor colorWithRed:50/255.0f green:70/255.0f blue:96/255.0f alpha:1.0f].CGColor;
square.path = other;
[self.layer addSublayer:square];

UPDATE

我尝试添加路径在一起,我得到完全相同的结果

CGPathAddPath(aPath,CGPathCreateWithRect(rectangle,nil));

CGPathAddPath(aPath,CGPathCreateWithEllipseInRect(CGRectMake((58 - 48) / 2,48),nil));
CGPathAddPath(aPath,CGPathCreateWithEllipseInRect(CGRectMake(0,58),nil));

解决方法

如果您想要一个仅描述路径构图轮廓的路径,则需要对参与的形状执行布尔运算.
那里有一些很好的教程.
例如.:
http://losingfight.com/blog/2011/07/07/how-to-implement-boolean-operations-on-bezier-paths-part-1/

如果只想达到轮廓的视觉外观,则可以绘制2个形状图层:

>一个填充通过CGPathCreateCopyByStrokingPath获得的路径
>一个填补你原来的路径

使用您发布的代码中的形状:

int thirds = self.height / 3;

CGMutablePathRef aPath = CGPathCreateMutable();

CGRect rectangle = CGRectMake((58 - 10) / 2,58));
CGPathCloseSubpath(aPath);

CGPathRef other = CGPathCreateCopyByStrokingPath(aPath,NULL,12.0,kCGLineCapRound,kCGLineJoinRound,1.0);
CAShapeLayer *square = [CAShapeLayer layer];
square.fillColor = [UIColor colorWithRed:36/255.0f green:56/255.0f blue:82/255.0f alpha:1.0f].CGColor;
square.path = other;
[self.view.layer addSublayer:square];

CAShapeLayer *square2 = [CAShapeLayer layer];
square2.fillColor = [UIColor colorWithRed:50/255.0f green:70/255.0f blue:96/255.0f alpha:1.0f].CGColor;
square2.path = aPath;
[self.view.layer addSublayer:square2];

这将形成以下形状:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读