2013-10-27 69 views
3

我開始學習OSX編程,並嘗試以編程方式繪製圖表。我遇到了使用CGPathRef(Core Graphics?)或NSBezierPath的示例。我缺乏的是對這兩種方法的理解。何時使用哪些和爲什麼?你能幫我嗎?提前致謝!CGPathRef和NSBezierPath有什麼區別?

回答

5

NSBezierPath覺得作爲圍繞CGPath的包裝,讓您的生活更輕鬆,如果你有意見(NSView)工作,而不是直接與圖形上下文(CGContext)。 NSBezierPath允許您在一個實例中指定路徑及其繪圖屬性(顏色,線尾等),而如果要使用CGPath,則需要分別創建並添加路徑,顏色,線尾等,並設置值到上下文(這是什麼NSBezierPath正在爲你做)。

所以,它們是相似的,但NSBezierPath是最佳的使用,當你繪製成圖,並CGPath提供所有的圖形上下文的原始動力。

0

那麼在某些情況下,NSBezierPath比CGPathRef更有益,例如在NSBezierpath中,它提供了可以使用顏色繪製路徑的api,但CGPathRef沒有提供任何API來繪製相同的需要使用CGContext的繪製路徑。這是一個區別,第二個區別是從ApplicationService框架派生的CGPath和派生自Appkit框架的NSBezierPath

1

NSBezierPath(和ios對應的UIBezierPath)是Objective-C對象,它們爲您封裝了CGPath API的大部分功能。這意味着你可以生活在Objective-C而不是Core Graphics C世界中。 最大的區別是C版本需要手動內存管理,可以更詳細。

除非另一個功能或方法需要特定的功能或方法,否則您可以使用您喜歡的任何一種。

然而,瞭解Cire Graphics以瞭解Cocoa繪圖中真正發生的事情很有幫助。