管理堆栈上的iOS核心图形位图上下文

时间:2016-08-22 22:02:14

标签: ios bitmap core-graphics uigraphicscontext

我可以成功创建和使用Core Graphics位图上下文进行背景绘制,如下所示:

  • 调用UIGraphicsBeginImageContextWithOptions()创建新的位图并使其成为当前上下文
  • 使用CG API绘制一些内容
  • 定期告诉我的观点在UIGraphicsGetImageFromCurrentImageContext()drawRect()之外拨打setNeedsDisplay(),然后在drawRect()内我将图片绘制到视图中
  • 最后调用UIGraphicsEndImageContext()来整理位图并将其从堆栈顶部删除。

一切都非常好并且工作正常,但是否有某种方法可以在堆栈上管理这种图形上下文?在整个过程中依赖它保持当前上下文似乎有点奇怪整个过程... 我的意思是,如果您的应用需要定期在两个不同的位图上显示每个都有自己上下文的位图,您会怎么做?

起初我以为我可以使用UIGraphicsPushContext()UIGraphicsPopContext(),但这会阻止位图上下文工作,而且UIKit Functions Reference确实说你不应该这样做:

  

[...]绘图环境立即被推送到图形上下文堆栈。

     

虽然此函数创建的上下文是当前上下文,但您可以调用UIGraphicsGetImageFromCurrentImageContext函数以基于上下文的当前内容检索图像对象。完成上下文修改后,必须调用UIGraphicsEndImageContext函数来清理位图绘制环境,并从上下文堆栈顶部删除图形上下文。 您不应该使用UIGraphicsPopContext函数从堆栈中删除此类上下文。

     

在大多数其他方面,此函数创建的图形上下文的行为与任何其他图形上下文相同。您可以通过推送和弹出其他图形上下文来更改上下文。您还可以使用UIGraphicsGetCurrentContext函数获取位图上下文。

任何想法......?这不是问题,但我想知道我是否在这里遗漏了一些东西...

1 个答案:

答案 0 :(得分:0)

如Apple开发人员文档中所述,无法从上下文堆栈中弹出UIGraphicsImageContext

如果确实需要并行操作两个位图上下文(或主线程之外),则可以通过使用Core Graphics API调用创建和操作它们来实现。这样做比使用UIGraphics API稍微复杂一些,并要求您管理像素和显示点之间的缩放,但它完全可以。