gpt4 book ai didi

ios - 为什么要使用 UIGraphicsPushContext/UIGraphicsPopContext

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:18:08 26 4
gpt4 key购买 nike

我在 MBProgressHUD ( https://github.com/jdg/MBProgressHUD ) 中注意到下面的代码

- (void)drawRect:(CGRect)rect {

CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);
//do something
UIGraphicsPopContext();
}

我想知道“推送上下文”也是当前上下文,为什么作者在绘制之前推送上下文。

评论说:

use UIGraphicsPushContext() & UIGraphicsPopContext() to preserve caller graphics context w.r.t. items this drawRect: may set (https://github.com/jdg/MBProgressHUD/commit/06d5bf88b9afffa7142e543606917033f157ba5e)

什么意思?

最佳答案

这是一件值得怀疑的事情,因为据我所知,这是完全没有意义的。这是将要发生的事情的逐个播放:

  1. View 被标记为脏,需要重绘
  2. 将创建图形上下文并将其推送到内部以供 View 绘制。
  3. 作者通过 UIGraphicsGetCurrentContext() 接收指向该上下文的指针
  4. 作者再次推送相同的上下文。
  5. 作者画了一些画
  6. 作者将上下文从堆栈中弹出(相同的上下文仍然存在)
  7. 在内部,上下文堆栈再次弹出。

作者可能觉得他们需要避免破坏当前的图形上下文,但这不是一个有效的问题,因为每次为 drawRect

创建一个独占上下文

据我所知,使用 push 和 pop 函数的原因是为了封装专门的上下文,例如为 drawRect 创建的窗口上下文。您可以在内部创建它,将其压入堆栈,外部类可以通过 UIGraphicsGetCurrentContext() 接收它,而无需了解其实现细节。完成后将其弹出。

保存和恢复 G 状态更类似于 OpenGL 用于快速回到之前的矩阵。

关于ios - 为什么要使用 UIGraphicsPushContext/UIGraphicsPopContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13289455/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com