CGContextSaveGState作用

CGContextSaveGState用于保存当前的图形上下文,确保后续绘制操作不会影响已设定的画笔颜色和大小等环境。通过实验展示了在设置不同颜色进行绘制后,如何利用此方法恢复原始的画笔状态。在实际生产中,该方法常用于在保持原有绘图设置的同时,临时改变某些属性以实现特定效果,如在复杂的绘图环境中绘制特殊元素。

1 结论

  • CGContextSaveGState是保存当前的上下文,可以理解为保存了当前的绘制环境,比如画笔颜色、画笔大小等信息。

2 实验:

- (void)drawRect:(CGRect)rect {
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    //设置蓝色画笔
    CGContextSetFillColorWithColor(ctx, [UIColor blueColor].CGColor);
    //画圆
    CGContextAddArc(ctx, 200, 200, 100, 0, 2*M_PI, 0);
    CGContextDrawPath(ctx, kCGPathFill);
    //保存环境
    CGContextSaveGState(ctx);
    
    CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);
    //画矩形
    CGContextAddRect(ctx, CGRectMake(200, 200, 200, 200));
    CGContextDrawPath(ctx, kCGPathFill);
    
    //还原环境
    CGContextRestoreGState(ctx);
    //画圆
    CGContextAddArc(ctx, 200, 500, 100, 0, 2*M_PI, 0);
    CGContextDrawPath(ctx, kCGPathFill);
}

效果:
在这里插入图片描述

分析:上述代码中

  1. 先是设置了蓝色画笔,画了一个圆,接着保存上下文(CGContextSaveGState)
  2. 然后再设置红色画笔,画一个红色矩形
  3. 最后再还原上下文,这时画笔被还原回了蓝色状态,所以画出来的圆形是蓝色的。

3 实际生产中的作用

想象一个场景,在当前绘画环境下,我们设置了许多绘画状态,比如填充颜色、描边颜色、文字大小、字体等。这时,我们需要绘制一个特殊的文字(许多绘画状态都需要改变),但是又不希望之前的状态都被清空了,于是我们使用了CGContextSaveGState这个方法来把这些上下文环境(绘画状态)保存了起来,设置一个白色字体,绘制完我们的特殊文字之后,调用CGContextRestoreGState把上下文环境还原回来。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值