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

前端之家收集整理的这篇文章主要介绍了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];

这将形成以下形状:

猜你在找的C&C++相关文章