Ios6 如何组合UIBezierPath图形?

Ios6 如何组合UIBezierPath图形?,ios6,uibezierpath,cgpath,Ios6,Uibezierpath,Cgpath,我正在尝试组合几个UIBezierPath图形 我可以绘制不同类型的图形(直线、三次贝塞尔、二次贝塞尔),每个图形都可以填充或不填充。我随机选择绘图类型,我的目标是制作3个不同的绘图,它们在一个点上相连 因此,第一条,比如说,线条画的终点,第二条路径——可能是一个三次贝塞尔曲线——开始。在这结束的地方,第三个,也许是一个填充的线条画开始了 我有一个正方形的UIView,我正试图把它画进去,每个路径都应该有它自己的UIView:第一个1/3,第二个和第三个 我可以用一个UIBezierPath对象

我正在尝试组合几个
UIBezierPath
图形

我可以绘制不同类型的图形(直线、三次贝塞尔、二次贝塞尔),每个图形都可以填充或不填充。我随机选择绘图类型,我的目标是制作3个不同的绘图,它们在一个点上相连

因此,第一条,比如说,线条画的终点,第二条路径——可能是一个三次贝塞尔曲线——开始。在这结束的地方,第三个,也许是一个填充的线条画开始了

我有一个正方形的
UIView
,我正试图把它画进去,每个路径都应该有它自己的
UIView
:第一个1/3,第二个和第三个


我可以用一个
UIBezierPath
对象创建这个,还是需要创建3个不同的对象?如何使它们在同一点上结束和开始?有没有办法用子路径实现这一点?

UIBezierPath只是CGPath的包装,CGPath本身只是一组用于绘制的指令(通过笔划或填充,或两者兼而有之)。那幅画可以在任何地方进行。换句话说,UIBezierPath只是一个绘图工具;重要的是图纸本身。给定一个图形上下文(可能是UIView、UIImage、CALayer等等),您可以连续绘制任意数量的图形—例如,一条直线,然后是一个立方贝塞尔曲线,然后是一个填充线图形。但是,如何执行这些绘图位完全取决于您。您不应该真正关心是否使用三个UIBezierPath、一个UIBezierPath、多个路径、一个路径、子路径,不管是什么(或者甚至通过将其他图形复制到此图形中)——最终的效果才是最重要的,即最终在该图形上下文中完成的累积图形


你的问题就像在问,“我应该用右手还是左手画这个圆,我应该逆时针还是顺时针画?”这无关紧要。一旦完成,将画出一个圆;这才是最重要的。

UIBezierPath的实例方法如下()

  • -addLineToPoint:
  • -addarchwithcenter:radius:startAngle:endAngle:顺时针方向:
  • -addCurveToPoint:controlPoint1:controlPoint2:
  • -addQuadCurveToPoint:controlPoint:
  • -附录路径:
可以逐个组合路径。完成后,使用
-closePath
关闭路径

请随意查看我的开源库,它名为。;)


如果你想要更多的自定义路径图,我推荐。您可以创建任意复杂的路径(您可以通过
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.
);

您可以这样组合路径:

UIBezierPath *endPath = [UIBezierPath bezierPath];
[endPath appendPath:leftLine];
[endPath appendPath:rightLine];
[endPath appendPath:midLine];

如果问题只是你不知道如何画画,我的书会解释: