3

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

4

3 回答 3

6

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

因此,它们是相似的,但NSBezierPath针对在视图中绘制时使用进行了优化,并CGPath提供了图形上下文的所有原始功能。

于 2013-10-27T15:07:09.127 回答
1

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

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

然而,学习 Cire Graphics 有助于理解 Cocoa 绘图中真正发生的事情。

于 2013-10-27T23:00:34.823 回答
0

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

于 2013-10-27T17:48:33.300 回答