如何组合UIBezierPath图纸?

mar*_*ina 4 cgpath uibezierpath ios6

我正在尝试组合几幅UIBezierPath图纸.

我可以制作不同类型的图纸(直线,立方贝塞尔曲线,二次贝塞尔曲线),并且每个都可以填充或填充.我随机选择了绘图类型,我的目标是制作3个不同的绘图,这些绘图在一个点连接.

因此,第一条线路绘图结束时,第二条路径 - 可能是一个立方贝塞尔曲线 - 开始.在那里结束,第三个,也许是填充的线条图开始.

我有一个UIView正在尝试绘制的正方形,每个路径应该有自己的一部分UIView:第一个1/3,第二个和第三个.

我能用一个UIBezierPath对象创建它,还是需要创建3个不同的对象?如何让它们在同一点结束并开始?有没有办法用子路径做到这一点?

Kju*_*uly 8

UIBezierPath的实例方法如(DOC)

  • -addLineToPoint:
  • -addArcWithCenter:radius:startAngle:endAngle:clockwise:
  • -addCurveToPoint:controlPoint1:controlPoint2:
  • -addQuadCurveToPoint:controlPoint:
  • -appendPath:

您可以逐个组合路径.完成后,使用-closePath关闭路径.

请随意查看我的开源lib,它名为UIBezierPath-Symbol.;)


如果你想要更多的自定义路径绘图,我建议CGMutablePath.您可以根据需要创建复杂的每个路径(可以按CGPathAdd...方法组合简单路径).最后,用CGPathAddPath()它们将它们组合在一起.

void CGPathAddPath (  
  CGMutablePathRef path1,     // The mutable path to change.
  const CGAffineTransform *m, // A pointer to an affine transformation matrix, or NULL if no transformation is needed. If > specified, Quartz applies the transformation to path2 before it is added to path1.
  CGPathRef path2             // The path to add.
);
Run Code Online (Sandbox Code Playgroud)


Dav*_*vid 5

您可以像这样组合路径:

UIBezierPath *endPath = [UIBezierPath bezierPath];
[endPath appendPath:leftLine];
[endPath appendPath:rightLine];
[endPath appendPath:midLine];
Run Code Online (Sandbox Code Playgroud)

贝塞尔路径箭头示例