【问题标题】:Managing iOS core graphics bitmap contexts on the stack管理堆栈上的 iOS 核心图形位图上下文
【发布时间】:2016-12-29 14:06:54
【问题描述】:

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

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

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

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

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

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

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

有什么想法...?这不是问题,但我想知道我是否在这里遗漏了什么......

【问题讨论】:

  • 也许解决这个问题的方法是使用 Core Graphics 调用构建图像(我还不明白该怎么做)

标签: ios bitmap core-graphics uigraphicscontext


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    相关资源
    最近更新 更多