CGPathRef和NSBezierPath有什么区别?

3

我开始学习OSX编程并试图通过编程绘制一个图表。我发现有些示例使用CGPathRef(核心图形?),有些则使用NSBezierPath。我不了解这两种方法的区别。什么时候该使用哪一种,为什么?你能帮忙吗?谢谢!

3个回答

6

NSBezierPath 可以视作 CGPath 的一个封装(wrapper),如果你正在处理视图(NSView)而不是直接处理图形上下文(CGContext), 那么使用NSBezierPath 将会更加方便。使用NSBezierPath可以在一个实例中指定路径和其绘制属性(颜色、线段端点等) ,而如果您使用CGPath , 您需要单独创建并添加路径、颜色、线段端点等,然后将值设置到上下文中(这就是NSBezierPath为您完成的工作)。

因此,它们是相似的,但当您在视图中进行绘制时,NSBezierPath 更为优化,而CGPath则提供了图形上下文的全部原始功能。


1

NSBezierPath(以及其 iOS 对应物 UIBezierPath)是 Objective-C 对象,它们为您封装了 CGPath API 的大部分功能。

这意味着您可以主要使用 Objective-C 而不是 Core Graphics C。最大的区别在于 C 版本需要手动内存管理并且可能更加冗长。

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

但是学习 Core Graphics 有助于理解 Cocoa 绘图中发生的实际情况。


0
在某些情况下,NSBezierPath比CGPathRef更有益。例如,在NSBezierPath中,它提供了可以使用颜色绘制路径的API,而CGPathRef没有提供任何绘制路径的API,需要使用CGContext来完成相同的绘制。这是一个差异之一,第二个差异是CGPath派生自ApplicationService框架,而NSBezierPath派生自Appkit框架。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接