CGPathRef和NSBezierPath有什么区别



我开始学习OSX编程,并尝试以编程方式绘制图表。我遇到过使用CGPathRef(Core Graphics?)或NSBezierPath的例子。我缺乏的是对这两种方法的理解。何时使用哪个以及为什么使用?你能帮忙吗?提前感谢!

NSBezierPath视为CGPath的包装器,如果您使用视图(NSView)而不是直接使用图形上下文(CGContext),这将使您的生活更轻松。 NSBezierPath允许您在一个实例中指定路径及其绘图属性(颜色、行尾等),而如果要使用CGPath则需要单独创建和添加路径、颜色、行尾等,并将值设置到上下文中(这就是NSBezierPath为您所做的)。

因此,它们是相似的NSBezierPath但经过优化,可在您绘制视图时使用CGPath并提供图形上下文的所有原始功能。

NSBezierPath(它是ios的对应物UIBezierPath)是Objective-C对象,它为你包装了CGPath API的大部分功能。这在很大程度上意味着你可以生活在Objective-C而不是Core Graphics C世界中。最大的区别是C版本需要手动内存管理,并且可以更详细。

您可以使用您喜欢的任何一种,除非其他函数或方法需要特定的函数或方法。

然而,学习Cire Graphics以了解可可绘图中真正发生的事情是有帮助的。

在某些情况下,

NSBezierPath比CGPathRef更有益,例如在NSBezierpath中,它提供了可以使用颜色绘制路径的api,但CGPathRef不提供任何API来绘制路径以绘制相同的需要使用CGContext。这是一个区别,第二个区别是CGPath派生自ApplicationService框架和NSBezierPath派生自Appkit框架

最新更新