0

我想知道,有没有CGPathAddElipseInRect画椭圆的替代方法?它工作得很好,但我需要一个曲线不那么陡峭的自定义椭圆。还有什么可以做的吗?我正在使用这个路径,CTFramesetterCreateFrame所以CoreText我可以在不同的形状内绘制文本。

4

2 回答 2

2

不...

...但它可以用 Core Graphics 来完成

您将不得不使用类似CGPathAddQuadCurveToPoint,CGPathAddCurveToPointCGPathAddArcToPoint为您的椭圆创建自定义路径。如果您不熟悉贝塞尔路径的控制点如何工作,您可以从阅读Wikipedia 文章开始。您无需阅读有关它的数学部分,只需查看此图像(来自 Wikipedia)。

带有控制点的贝塞尔曲线(来自维基百科)

对于...AddCurveTo...方法:

您的当前点是p 0,终点是p 3。两个控制点是p 1p 2

对于...AddQuadCurveTo..方法:

同上,但只有一个控制点。

对于...AddArcTo..方法:

不要使用控制点。而是使用固定半径。


...如果您愿意,也可以使用 UIBezierPath 创建路径

UIBezier 路径上也有类似的方法,例如addCurveToPoint:controlPoint1:controlPoint2:or addCurveToPoint:controlPoint1:controlPoint2:。然后可以将贝塞尔路径转换为 ​​CGPath,但如果您熟悉 Core Graphics,则不需要这样做。

于 2012-05-21T22:03:09.727 回答
1

您可以创建一个UIBezierPath然后获取它的CGPath属性。

如何创建此路径将取决于您的需求。该方法+(UIBezierPath *) bezierPathWithOvalInRect:看起来最相似CGPathAddElipseInRect

您还可以使用它的填充和描边方法绘制到当前上下文中。

于 2012-05-21T13:47:58.937 回答