我在MBProgressHUD(https://github.com/jdg/MBProgressHUD)
中注意到以下代码- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);
//do something
UIGraphicsPopContext();
}
我想知道“推送上下文”也是当前的上下文,为什么作者在绘制之前会推送上下文。
评论说:
这是什么意思?使用UIGraphicsPushContext()& UIGraphicsPopContext()保存调用者图形上下文w.r.t.此drawRect的项目:可以设置 (https://github.com/jdg/MBProgressHUD/commit/06d5bf88b9afffa7142e543606917033f157ba5e)
答案 0 :(得分:2)
这是一个值得怀疑的事情,因为据我所知,它完全没有意义。以下是将要发生的事情的播放:
UIGraphicsGetCurrentContext()
作者可能认为他们需要避免破坏当前的图形上下文,但这不是一个有效的问题,因为每次为drawRect
据我所知,push和pop函数的原因是封装了专门的上下文,比如为drawRect
创建的窗口上下文。您可以在内部创建它,将其推送到堆栈,外部类可以通过UIGraphicsGetCurrentContext()
接收它,而无需了解其实现细节。完成后弹出它。
保存和恢复G状态更类似于OpenGL用于捕捉回到之前的矩阵。