Quartz Core、Core Graphics和Quartz 2D有什么区别?

78

我想知道有没有人能够准确区分它们之间的差异?据我理解,核心图形(Core Graphics)只是一个“框架包(Framework Package)”,其中包含着Quartz Core和Quartz 2D。但我不确定Quartz 2D是否实际上就是Quartz Core?也许有人可以画一些区别的界限吗?这两者之间的差异是什么?

在查看文档时,我看到Quartz Core只列出了所有的核心动画(Core Animation)内容。所以Quartz Core == Core Animation吗?

3个回答

98
Quartz 2D是Core Graphics框架的一个API,用于实现绘图。
Quartz Core是一个包括动画和图像处理API的框架。

石英框架及其API

CoreGraphics.framework

  • Quartz 2D API 管理图形上下文并实现绘图。
  • Quartz Services API 提供对窗口服务器的低级访问。这包括显示硬件、分辨率、刷新率等。

QuartzCore.framework

  • 核心动画:用于进行2D动画的Objective-C API。
  • 核心图像:图像和视频处理(滤镜、变形、转换)。iOS 5

Quartz.framework仅限于OS X

所有三个框架在底层都使用OpenGL,因为iOS或OS X中的所有绘图最终都要通过OpenGL完成。有关详细信息,请参阅Mac OS X Technology Overview的Media Layer Frameworks部分。
您可能听说过的其他“Quartz”技术:
- Quartz Extreme:用于Quartz Composer的GPU加速。 - QuartzGL(又名“Quartz 2D Extreme”):用于Quartz 2D的GPU加速。
这些是GPU渲染的内部实现,而非API。它们决定是否在CPU中创建窗口缓冲区并仅使用OpenGL上传为纹理(默认情况),或者使用OpenGL进行整个渲染,但这并不总是提高性能。您可以使用QuartzGLEnable Info.plist设置在两者之间切换。有关说明,请参阅John Siracusa对Mac OS X 10.4 Tiger的评论,第13页和第14页。
“Quartz”和“Core”是随意用于框架和API的营销名称。如果他们想要创造一个混乱的命名混乱,那么他们已经成功了。

2
这里有另一篇关于完成的SO文章:https://dev59.com/8Gox5IYBdhLWcg3wWzN7#9248627 - hashier
@jano,对于这条评论点个赞:「Quartz」和「Core」是随意散布在框架和API中的营销名称。如果他们想要创造一个混乱的命名混乱,那么他们成功了。 - muzz

38

来自Quartz 2D编程指南

Quartz 2D API是Core Graphics框架的一部分,因此您可能会看到人们将Quartz称为Core Graphics或简称为CG。

在提到Mac / iPhone上的二维绘图时,我倾向于将Quartz和Core Graphics混用,即使从技术上讲这不正确。

iPhone上的Quartz Core框架包含用于核心动画的类和支持元素,并且还包含用于核心图像的项目。


6

需要注意的是,新的单视图应用程序默认会链接CoreGraphics框架,但不会链接QuartzCore。因此,如果您正在处理CAEAGLLayer等内容,可能很快就会出现“未知对象”错误。


特别是当您在UIView上使用.layer属性时,这一点尤为明显。例如,要更改“角半径”,您需要导入QuartzCore框架。 - Abhishek Bedi

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