【问题标题】:iOS " current graphics context" - What is thatiOS“当前图形上下文” - 那是什么
【发布时间】:2011-06-13 22:20:07
【问题描述】:

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

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

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

【问题讨论】:

标签: ios core-graphics uigraphicscontext graphicscontext uigraphicsimagerenderer


【解决方案1】:

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

【讨论】:

  • 仅供参考,在 iOS 上,与获取当前图形上下文相关的函数仅仅是 UIKit 参考函数,而不是“类”。 ;)
  • 我也将“上下文”称为“状态”,而不是“类”。不过,类可能是实现它的一种方式。
【解决方案2】:

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

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

【讨论】:

  • 为完全相同的绘图调用提供不同的上下文你能用一些代码说明你的意思吗?
【解决方案3】:

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

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

【讨论】:

  • 你的意思是我们在 drawRect 中免费获得上下文是什么意思?
  • @mskw:这意味着在-drawRect:内部,框架已经设置了一个图形上下文并将其设置为“当前上下文”,所以你的UIKit绘图命令可以工作而不用担心上下文.在-drawRect: 之外,这通常不是真的。
  • 但是你还是需要调用UIGraphicsBeginImageContextWithOptions函数吧?
  • @mskw:在-drawRect:?绝对不。这样做意味着您正在绘制一个全新的图形上下文,而不是UIView(或CALayer)将实际显示在屏幕上的那个。
  • @mskw:你可以把它想象成框架代码看起来像这样的伪代码:UIGraphicsBeginImageContextWithOptions(view.bounds, ...); [yourView drawRect:view.bounds]; UIImage *image = UIGraphicsGetImageFromContext(); UIGraphicsEndImageContext(); saveImageToLayerAndDrawToScreen(image);
猜你喜欢
  • 2011-06-14
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 2014-07-24
  • 2016-03-03
  • 1970-01-01
相关资源
最近更新 更多