• iOS的Quartz2D篇——基本图形的绘制


    一、如何利用Quartz2D绘制东西到view上?
    首先,得有图形上下文Context,因为它能保存绘图信息,并且决定着绘制到什么地方去
    其次,那个图形上下文必须跟view相关联,才能将内容绘制到view上面
     
    二、自定义图形的基本步骤
    1、新建一个类,继承自UIView
    2、实现- (void)drawRect:(CGRect)rect方法,然后在这个方法中
    2.1取得跟当前view相关联的图形上下文
    2.2绘制相应的图形内容
    2.3利用图形上下文将绘制的所有内容渲染显示到view上面
     
    三、基本图形的绘制
    1、直线
     1 - (void)drawRect:(CGRect)rect
     2 {
     3     /**   一、画直线:*/
     5     //    1、上下文
     6     CGContextRef ctx = UIGraphicsGetCurrentContext();
     7 
     8     //    2、绘制图形
     9     //    2.1起点
    10     CGContextMoveToPoint(ctx, 50, 100);
    11     //    2.2终点
    12     CGContextAddLineToPoint(ctx, 250, 100);
    13     
    14     
    15     CGContextAddLineToPoint(ctx, 250, 150);
    16     //    2.3颜色
    17     [[UIColor blueColor] set];
    18     //    2.4宽度
    19     CGContextSetLineWidth(ctx, 10);
    20     //    2.5起点终点的样式
    21     //    kCGLineCapButt,直角
    22     //    kCGLineCapRound, 圆弧
    23     //    kCGLineCapSquare 正方形  
    25     CGContextSetLineCap(ctx, kCGLineCapRound);
    26     
    27     //    2.6拐角样式
    28     //    kCGLineJoinMiter:直角
    29     //    kCGLineJoinBevel:斜面
    30     //    kCGLineJoinRound:圆弧
    31     CGContextSetLineJoin(ctx, kCGLineJoinBevel);
    32     
    33     //   3、渲染直线(使用空心的线,直线不用实心的):
    34 //    CGContextFillPath(ctx);
    35     CGContextStrokePath(ctx);
    36     
    37 }

    2、四边形

    - (void)drawRect:(CGRect)rect
    {
    
        /**  二、画四边形:
         思路一:设置四个点,依次连接,最后用closePath闭合
         思路二:直接用CGContextAddRect方法,传递起点和宽高就好;但只能画正四边形*/
        
        //    1、上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        /* 方法一:
         //    2、绘制图形
         //    2.1第一个点
         CGContextMoveToPoint(ctx, 50, 100);
         //    2.2第二个点
         CGContextAddLineToPoint(ctx, 50, 200);
         //    2.3第三个点
         CGContextAddLineToPoint(ctx, 250, 200);
         //    2.4第4个点
         CGContextAddLineToPoint(ctx, 250, 100);
         //    2.4闭合
         CGContextClosePath(ctx);
         */
        
        //    方法二:
        CGContextAddRect(ctx, CGRectMake(100, 100, 100, 100));
        
        //    2.5颜色
        [[UIColor purpleColor] set];
        
        //   3、渲染可以实心:
        CGContextFillPath(ctx);
    }

    三、椭圆

    - (void)test3Ellipse
    {
        /**  三、画椭圆 和圆:
         思路:直接用CGContextAddEllipseInRect方法,传递起点和宽高就好;但只能画正四边形*/
        
        //    1、上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        
        //    2、椭圆 宽 != 高
        CGContextAddEllipseInRect(ctx, CGRectMake(50, 100, 200, 100));
        
        //    3、圆: 宽 = 高
        CGContextAddEllipseInRect(ctx, CGRectMake(100, 300, 100, 100));
        
        //    2.5颜色
        [[UIColor blueColor] set];
        
        //   3、渲染可以实心:!注意:要让两个图形的颜色不一样,就需要单独渲染,不能共用一个渲染器
        CGContextFillPath(ctx);
       }

    4、圆弧

    - (void)test4AngleLine
    {
        /**  四、圆弧:
         思路:直接用CGContextAddArc*/
        
        //    1、上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        
        // 2.画圆弧CGContextAddArc方法的参数:
        // x/y 圆心
        // radius 半径
        // startAngle 开始的弧度
        // endAngle 结束的弧度
        // clockwise 画圆弧的方向 (0 顺时针, 1 逆时针)
        //    CGContextAddArc(ctx, 100, 100, 50, -M_PI_2, M_PI_2, 0);
        CGContextAddArc(ctx, 150, 100, 50, 0, M_PI, 1);
        //    2.5颜色
        [[UIColor greenColor] set];
        
        //   3、渲染
        CGContextStrokePath(ctx);
    }

    5、饼状图

    - (void)test5Cake
    {
        /** 五、画饼状图
         思路:直接先画直线,之后接着最后的点画一个弧线,最后close*/
        
        //    1、上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        //
        // 2.1画线
        CGContextMoveToPoint(ctx, 100, 100);
        CGContextAddLineToPoint(ctx, 100, 150);
        // 2.2画圆弧
        CGContextAddArc(ctx, 100, 100, 50, M_PI_2, M_PI, 0);
        //    CGContextAddArc(ctx, 100, 100, 50, -M_PI, M_PI_2, 1);
        
        // 2.3关闭路径
        CGContextClosePath(ctx);
        
        // 2.4颜色
        [[UIColor yellowColor] set];
        
        //   3、渲染
        CGContextFillPath(ctx);
    }
  • 相关阅读:
    SCOI 2012 滑雪与时间胶囊
    TYVJ P1730 二逼平衡树
    CDQZ_Training 20120524 词编码
    VC++学习笔记之消息处理机制和窗口过程函数
    项目管理本质论
    VC++学习笔记之创建窗口
    C++随笔(二)
    SqlServer的那些常用操作(一)
    C++随笔(一)
    Silverlight游戏开发学习笔记(二)
  • 原文地址:https://www.cnblogs.com/coco-bao9107/p/3777767.html
Copyright © 2020-2023  润新知