美文网首页
CGContextSaveGState与UIGraphicsPu

CGContextSaveGState与UIGraphicsPu

作者: hongzhenw | 来源:发表于2020-05-27 06:11 被阅读0次

在此记录下,两者的区别。

CGContextSaveGState的使用如下:

CGContextRef ctx = UIGraphicsGetCurrentContext();
[UIColor.redColor setFill];
UIRectFill(CGRectMake(0, 0, 50, 50));
CGContextSaveGState(ctx);

[UIColor.blackColor setFill];
UIRectFill(CGRectMake(50, 0, 50, 50));

CGContextRestoreGState(ctx);
UIRectFill(CGRectMake(100, 0, 50, 50));

效果图如下:


Simulator Screen Shot - iPhone 8 - 2020-05-27 at 05.44.27.png

解释说明:

  1. 首先,先设置上下文的颜色为黑色,接着调用CGContextSaveGState使上下文入栈
  2. 接着上下文的颜色又改成了黑色,并进行绘制矩形,可以看到此时矩形的颜色变成了黑色
  3. 当调用CGContextRestoreGState后,使之前保存的上下文出栈,再次画矩形,前面颜色设置的有红色和黑色,此时矩形使用颜色是入栈前设置的红色,恢复到了最初的状态

UIGraphicsPushContext的使用如下:

CGContextRef ctx = UIGraphicsGetCurrentContext();
[UIColor.redColor setFill];
UIRectFill(CGRectMake(0, 0, 50, 50));
UIGraphicsPushContext(ctx);

[UIColor.blackColor setFill];
UIRectFill(CGRectMake(50, 0, 50, 50));

UIGraphicsPopContext();
UIRectFill(CGRectMake(100, 0, 50, 50));

效果图如下:


Simulator Screen Shot - iPhone 8 - 2020-05-27 at 05.57.04.png

解释说明:

  1. 首先,先设置上下文的颜色为黑色,接着调用UIGraphicsPushContext使上下文入栈
  2. 接着上下文的颜色又改成了黑色,并进行绘制矩形,可以看到此时矩形的颜色变成了黑色
  3. 当调用UIGraphicsPopContext后,使之前保存的上下文出栈,再次画矩形,前面颜色设置的有红色和黑色,此时矩形使用颜色是入栈后设置的黑色

结论:

使用CGContextSaveGState保存入栈前的上下文,调用CGContextRestoreGState后,接着使用入栈前的上下文,使之恢复到最初状态。
UIGraphicsPushContext更改当前上下文的状态,简单理解为使用了一个新的上下文,调用UIGraphicsPopContext使旧的上下文进行出栈。

相关文章

网友评论

      本文标题:CGContextSaveGState与UIGraphicsPu

      本文链接:https://www.haomeiwen.com/subject/ncriahtx.html