Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c CGPathRef和NSBezierPath之间有什么区别?_Objective C_Cocoa_Quartz 2d - Fatal编程技术网

Objective c CGPathRef和NSBezierPath之间有什么区别?

Objective c CGPathRef和NSBezierPath之间有什么区别?,objective-c,cocoa,quartz-2d,Objective C,Cocoa,Quartz 2d,我开始学习OSX编程,并尝试以编程方式绘制图表。我遇到了使用CGPathRef(核心图形?)或NSBezierPath的示例。我缺乏的是对这两种方法的理解。何时使用哪一种?为什么?你能帮忙吗?提前谢谢 将NSBezierPath看作是CGPath的包装器,如果您使用视图(NSView),而不是直接使用图形上下文(CGContext),您的生活会更轻松NSBezierPath允许您在一个实例中指定路径及其图形属性(颜色、线条端点等),而如果要使用CGPath则需要分别创建和添加路径、颜色、线条端点

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

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


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

在某些情况下,NSBezierPath比CGPathRef更为有益,例如,在NSBezierPath中,它提供了可以使用颜色绘制路径的api,但是CGPathRef不提供任何api来绘制路径,以便绘制同样需要使用CGContext的路径。这是一个区别,第二个区别是源自ApplicationService framework的CGPath和源自Appkit framwork的NSBezierPath(以及ios对应的UIBezierPath)是Objective-C对象,它们为您包装了CGPath API的大部分功能。 这在很大程度上意味着您可以生活在Objective-C而不是核心图形C世界中。 最大的区别是C版本需要手动内存管理,而且可能更详细

除非另一个函数或方法需要特定的函数或方法,否则可以使用您喜欢的任何函数或方法

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