我正在尝试合并多个UIBezierPath
图纸。
我可以制作不同类型的图纸(直线,立方贝塞尔曲线,二次贝塞尔曲线),并且每个都可以填充或未填充。我随机选择了绘图类型,我的目标是制作3个不同的绘图,这些绘图在一个点连接。
所以第一条线,例如线条图结束,第二条路径 - 也许是一个立方贝塞尔曲线 - 开始。在那里结束,第三个,也许是一个填充的线条画开始。
我有一个正方形UIView
,我正试图将其绘制成每个路径应该有UIView
的一部分:第一个1/3,第二个和第三
我是否可以使用一个UIBezierPath
对象创建此对象,还是需要创建3个不同的对象?如何使它们在同一点结束并开始?有没有办法用子路径做到这一点?
答案 0 :(得分:8)
UIBezierPath的实例方法如(DOC)
-addLineToPoint:
-addArcWithCenter:radius:startAngle:endAngle:clockwise:
-addCurveToPoint:controlPoint1:controlPoint2:
-addQuadCurveToPoint:controlPoint:
-appendPath:
您可以逐个组合路径。完成后,使用-closePath
关闭路径。
请随意查看名为UIBezierPath-Symbol的开源lib。 ;)
如果您想要更多自定义路径绘制,我建议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.
);
答案 1 :(得分:3)
您可以组合这样的路径:
UIBezierPath *endPath = [UIBezierPath bezierPath];
[endPath appendPath:leftLine];
[endPath appendPath:rightLine];
[endPath appendPath:midLine];
答案 2 :(得分:1)
UIBezierPath只是CGPath的包装器,它本身只是一组绘图指令(通过笔划或填充,或两者兼而有之)。那幅画可以在任何地方进行。换句话说,UIBezierPath只是一个绘图工具;重要的是绘图本身。给定一个图形上下文(可能是UIView,UIImage,CALayer,等等),你可以连续绘制尽可能多的绘图 - 例如,一条线,然后是一个立方贝塞尔曲线,然后是一个填充的线条图。但如何你执行这些绘图位完全取决于你。你不应该真的关心你是否用三个UIBezierPaths,一个UIBezierPath,多个路径,一个路径,子路径,等等(或者甚至通过将其他图纸复制到这个中)来做 - 最后的效果是全部这很重要,即累积的绘图最终在此图形上下文中完成。
你的问题就像是问:“我应该用右手还是左手画这个圆圈,我应该逆时针或顺时针画它?”没关系。一旦完成,将会画出一个圆圈;这才是最重要的。