20160726关于Quartz2D常见问题梳理

1.对于以前一个误区进行纠正,查看以下打印

2016-07-25 15:51:15.861 0725Block[2962:135583] **-[ViewController viewDidLoad]:[Line:24]*****

2016-07-25 15:51:15.929 0725Block[2962:135583] **-[ViewController viewWillAppear:]:[Line:56]*****

2016-07-25 15:51:15.935 0725Block[2962:135583] **-[ViewController viewDidAppear:]:[Line:62]*****

目的:了解一下view的创建过程


2.关于Quartz的绘图

以前总是没有很好的理解图形上下文栈,今天又去了解一下,目前算基本明了。

上下文状态栈为内存中的一块区域,它用来保存前上下文当的状态.

我们获取的图层上下文当中其实两块区域,一个是存放添加的路径,一个是用来保存用户设置的状态,

这些状态包括线条的颜色,线宽等.

原来有两块区域呀,利用这点可以很好的解决一个问题。

问题:如何在同一个图形上下文栈中绘制不同属性的图形?


可以参考下面这段代码,完成绘制不同的图形


-(void)drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    UIBezierPath *path = [UIBezierPath bezierPath];
    
    [path moveToPoint:CGPointMake(0, 0)];
    [path addLineToPoint:CGPointMake(rect.size.width,rect.size.height)];
    [[UIColor blueColor] set];
   
    CGContextSetLineWidth(ctx, 10);
//    CGContextSaveGState(ctx);
    CGContextAddPath(ctx, path.CGPath);
    CGContextStrokePath(ctx);
//    CGContextSaveGState(ctx);
    
    path = [UIBezierPath bezierPath];
    [path moveToPoint:CGPointMake(0, rect.size.height)];
    [path addLineToPoint:CGPointMake(rect.size.width, 0)];
    CGContextSetLineWidth(ctx,2);
    [[UIColor yellowColor] set];
//    CGContextRestoreGState(ctx);
    
    CGContextAddPath(ctx, path.CGPath);
    
    
    //将上下文添加到上下文
    CGContextStrokePath(ctx);
}


其中有两个函数很重要,那就是

1.把上下文状态保存到上下文状态栈

   CGContextSaveGState(ctx)

2.上下文状态栈中取出上下文状态

   CGContextRestoreGState(ctx)


其他的一些绘图的内容还是比较简单的,也没什么可以介绍的。


本文完







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值