我想知道,有没有CGPathAddElipseInRect
画椭圆的替代方法?它工作得很好,但我需要一个曲线不那么陡峭的自定义椭圆。还有什么可以做的吗?我正在使用这个路径,CTFramesetterCreateFrame
所以CoreText
我可以在不同的形状内绘制文本。
问问题
589 次
2 回答
2
不...
...但它可以用 Core Graphics 来完成
您将不得不使用类似CGPathAddQuadCurveToPoint
,CGPathAddCurveToPoint
或CGPathAddArcToPoint
为您的椭圆创建自定义路径。如果您不熟悉贝塞尔路径的控制点如何工作,您可以从阅读Wikipedia 文章开始。您无需阅读有关它的数学部分,只需查看此图像(来自 Wikipedia)。
...AddCurveTo...
方法:
您的当前点是p 0,终点是p 3。两个控制点是p 1和p 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 回答