CGPathRef和NSBezierPath有什么区别?

时间:2013-10-27 14:49:43

标签: objective-c cocoa quartz-2d

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

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

NSBezierPath(和ios对应的UIBezierPath)是Objective-C对象,它们为您提供了CGPath API的大部分功能。 这意味着您可以使用Objective-C而不是Core Graphics C世界。 最大的区别是C版需要手动内存管理,可能更加冗长。

除非您需要特定的功能或方法,否则您可以使用您喜欢的任何一种。

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

答案 2 :(得分:0)

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