17

当我绘制线条和形状等时,我会在 iOS 中获得“当前图形上下文”。

究竟什么是“当前图形上下文” - 我正在寻找 30,000 英尺的描述。

现在我只是复制和粘贴 UI 代码,不确定它在做什么。

4

3 回答 3

17

图形上下文是存储有关绘图状态的信息的地方。这包括填充颜色、描边颜色、线条宽度、线条图案、缠绕规则、遮罩、当前路径、透明度图层、变换、文本变换等。使用 CoreGraphics 调用时,您可以指定要用于每个函数的上下文。这意味着您可以一次使用多个上下文,尽管通常您只使用一个。在 UIKit 层,有“当前”图形上下文的概念,它是所有 UIKit 级别的绘图调用(例如-[UIColor set]UIBezierPath绘图)使用的图形上下文。当前上下文存储在上下文堆栈中,因此您可以为某些绘图创建一个新上下文,然后当您完成它时恢复以前的上下文。通常,您会免费获得上下文inside -[UIView drawRect:]CALayer 显示相关方法的内部,但不是其他的。

过去,“当前”上下文是应用程序范围的全局状态,因此在主线程之外触摸是不安全的。从 iOS 4.0(我相信)开始,这变成了线程本地状态,并且 UIKit 级别的绘图方法变得可以安全地在后台线程上使用。

于 2011-01-23T06:41:03.160 回答
16

操作系统需要一个地方来保存信息,例如绘图状态,您不想在每个 CG 绘图命令中指定这些信息,例如要在哪个位图或视图中绘制、要使用的比例或其他变换、最后的颜色你指定等

上下文告诉每个 CG 调用在哪里可以找到当前绘图调用的所有这些“东西”。为完全相同的绘图调用提供不同的上下文,该调用可能会在完全不同的视图中使用不同的颜色、不同的比例等绘制到不同的位图。

于 2011-01-23T05:54:44.173 回答
1

基本上,它是平台(iOS、Android、JavaME 和许多其他平台)中的一个类,提供对该平台提供的所有绘图/显示功能的访问。当然,对于不同的平台,它会有所不同,但这是 30,000 英尺的描述 :)

于 2011-01-23T05:11:29.390 回答