iOS";“当前图形上下文”那是什么

iOS";“当前图形上下文”那是什么,ios,core-graphics,uigraphicscontext,graphicscontext,uigraphicsimagerenderer,Ios,Core Graphics,Uigraphicscontext,Graphicscontext,Uigraphicsimagerenderer,当我绘制线条和形状等时,我会在iOS中获得“当前图形上下文” 究竟什么是“当前图形上下文”-我正在寻找30000英尺的描述 现在我只是复制和粘贴UI代码,并不完全确定它在做什么。基本上,它是一个平台(iOS、Android、JavaME和许多其他平台)中的类,提供了对该平台提供的所有绘图/显示功能的访问。当然,对于不同的平台,它会有所不同,但这是30000英尺的描述:)操作系统需要一个位置来保存信息,例如绘图状态,您不希望在每个CG绘图命令中指定这些信息,例如要绘制的位图或视图、要使用的比例或其

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

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


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

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

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


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

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


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

我不太确定“30000英尺描述”是什么。你是说一个非常全面和详细的解释吗?这里是。一个“30000英尺的视野”也被称为“大画面”。在离地球30000英尺的地方,地面上的许多细节肉眼看不清楚。另请参见谷歌搜索结果顶部“30000英尺视图短语”的第四项:要获得关于广域视图的清晰解释,请尝试以下内容。。。仅供参考,在iOS上,与获取当前图形上下文相关的函数只是UIKit参考函数,而不是“类”。)我还将“上下文”称为“状态”,而不是“类”。不过,类可能是实现它的一种方式。在drawRect内部免费获得上下文是什么意思?@mskw:这意味着在
-drawRect:
内部,框架已经设置了图形上下文并将其设置为“当前上下文”,因此您的UIKit绘图命令可以工作而不必担心上下文。在
-drawRect:
之外,这通常是不正确的。但是您仍然需要调用UIGraphicsBeginImageContextWithOptions函数,对吗?@mskw:In
-drawRect:
?绝对不是。这样做意味着您将进入一个全新的图形上下文,而不是
UIView
(或
CALayer
)将实际显示在屏幕上的上下文。@mskw:您可以将其视为框架代码类似于以下伪代码:
UIGraphicsBeginImageContextWithOptions(view.bounds,…);[yourView drawRect:view.bounds];UIImage*image=UIGraphicsGetImageFromContext();UIGraphicsSendImageContext();将图像保存到图层和绘图到屏幕(图像)为完全相同的绘图调用提供不同的上下文你能用一些代码说明你的意思吗?