zoukankan      html  css  js  c++  java
  • 记录一次Quartz2D学习(一)

    经常看点

    drawRect的重写  但是不知道这究竟是神马 

     

     

    今天开始学习这一块的东西,更确切地说是深入 

     

    早在view的时候 就经常会调用layer的maskToBounds属性,其实 重写

    drawRect方法  也就是对layer的一个绘制

     

    重写也比较简单

    1 线条

    1.1 下面就是简单地线条的画法:(效果如图)

    - (void)drawRect:(CGRect)rect {

        // Drawing code

        //获取绘制图形的上下文

        CGContextRef    ctx =UIGraphicsGetCurrentContext();

        //设置线条的宽度

        CGContextSetLineWidth(ctx, 20);

        //设置线条的填充颜色

        CGContextSetRGBStrokeColor(ctx, 250, 250, 250, 0.5);

        //设置线条的起点

        CGContextMoveToPoint(ctx, 100, 100);

        //添加线条

        CGContextAddLineToPoint(ctx, 150, 150);

        //设置线条的圆角

        CGContextSetLineCap(ctx, kCGLineCapRound);//kCGLineCapRound 属性有多种,可以设置线条的各种边角状态

        //进行绘制

        CGContextStrokePath(ctx);

    }

     

     

     

    1.2 一笔画两条线段

     方法重写如下:

    - (void)drawRect:(CGRect)rect {

     

        CGContextRef    ctx =UIGraphicsGetCurrentContext();

        CGContextSetLineWidth(ctx, 20);

        CGContextSetRGBStrokeColor(ctx, 250, 250, 250, 0.5);

        CGContextMoveToPoint(ctx, 100, 100);

        

        CGContextAddLineToPoint(ctx, 150, 150);

        CGContextSetLineCap(ctx, kCGLineCapRound);

        CGContextSetLineJoin(ctx, kCGLineJoinRound);

        

        //这两句是在此前的基础上添加的

        //先移动到对应的点,再进行绘制

        CGContextMoveToPoint(ctx, 150, 150);//可有可无 没有这句,效果相同

        CGContextAddLineToPoint(ctx, 100, 200);

        

        CGContextStrokePath(ctx);

    }

     

     

     

     

    1.3 绘制状态的保存问题 :

    当你保存了绘制的状态 之后,就可以回复到上一次保存的状态

    TIP: 保存与恢复方法,要成对出现,否则会出现报错---原因,栈内不存在绘制状态

    重写方法如下

    - (void)drawRect:(CGRect)rect {

     

        CGContextRef    ctx =UIGraphicsGetCurrentContext();

        //保存当前的绘制状态

        CGContextSaveGState(ctx);

        

        CGContextSetLineWidth(ctx, 20);

        CGContextSetRGBStrokeColor(ctx, 250, 250, 250, 0.5);

        CGContextMoveToPoint(ctx, 100, 100);

        

        CGContextAddLineToPoint(ctx, 150, 150);

        CGContextSetLineCap(ctx, kCGLineCapRound);

        CGContextSetLineJoin(ctx, kCGLineJoinRound);

        

        //提取出上一次保存的绘制状态

        CGContextRestoreGState(ctx);

        //另外一种颜色的设置方法

        [[UIColor yellowColor] set];

        CGContextMoveToPoint(ctx, 150, 150);//可有可无 没有这句,效果相同

        CGContextAddLineToPoint(ctx, 100, 200);

        

        CGContextStrokePath(ctx);

    }

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Python基础之列表功能
    python基础之字符串基本功能
    Linux服务器上搭建codis集群之——安装前环境准备
    centos7环境开启WIFI热点
    升级glibc、gcc、zlib等
    修复Nginx 502错误:upstream sent too big header while reading response header from upstream
    PS 命令详解
    Linux下网络文件系统NFS服务搭建易错点总结
    2020美赛建模竞赛一等奖经验心得分享
    团队获奖总结
  • 原文地址:https://www.cnblogs.com/thxios/p/5143154.html
Copyright © 2011-2022 走看看