美文网首页
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