我开始学习 OSX 编程并尝试以编程方式绘制图表。我遇到了使用 CGPathRef(核心图形?)或 NSBezierPath 的示例。我缺乏的是对这两种方法的理解。何时使用 which 以及为什么?你能帮我吗?提前致谢!
3 回答
如果您使用视图()而不是直接使用图形上下文( ),可以将其NSBezierPath
视为一个包装器,它可以让您的生活更轻松。允许您在一个实例中指定路径及其绘图属性(颜色、行尾等),而如果您要使用,则需要分别创建和添加路径、颜色、行尾等,并将值设置到上下文(这就是为你做的事情)。CGPath
NSView
CGContext
NSBezierPath
CGPath
NSBezierPath
因此,它们是相似的,但NSBezierPath
针对在视图中绘制时使用进行了优化,并CGPath
提供了图形上下文的所有原始功能。
NSBezierPath(和它的 ios 对应物 UIBezierPath)是 Objective-C 对象,它为您包装了 CGPath API 的大部分功能。这在很大程度上意味着您可以生活在 Objective-C 而不是 Core Graphics C 世界中。最大的不同是 C 版本需要手动内存管理,并且可能更冗长。
您可以使用您喜欢的任何一种,除非另一个功能或方法需要特定的功能或方法。
然而,学习 Cire Graphics 有助于理解 Cocoa 绘图中真正发生的事情。
好吧,在某些情况下,NSBezierPath 比 CGPathRef 更有益,例如在 NSBezierpath 中,它提供了可以使用颜色绘制路径的 api,但 CGPathRef 没有提供任何 api 来绘制路径,同样需要使用 CGContext。这是第一个区别,第二个区别是从 ApplicationService 框架派生的 CGPath 和从 Appkit 框架派生的 NSBezierPath