微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我使用几个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];

这将形成以下形状:

原文地址:https://www.jb51.cc/c/114662.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐