• Quartz2D学习笔记


    1、drawRect方法

     1 //1.证明drawRect方法是在viewDidLoad后自动调用的,方便处理View的相关属性
     2 //    YQView * view = [[YQView alloc] initWithFrame:self.view.bounds];
     3 //
     4 //    [self.view addSubview:view];
     5 
     6     //2.init证明如果在初始化的时候没有设置rect的大小,将导致drawRect不能被自动调用
     7 //    YQView * view = [[YQView alloc] init];
     8 //
     9 //    [self.view addSubview:view];
    10 
    11     //3.手动调用drawRect
    12     self.customView = [[YQView alloc] initWithFrame:self.view.bounds];
    13 
    14     [self.view addSubview:self.customView];
    15 
    16     self.customView.iconImage = [UIImage imageNamed:@"1.jpg"];
    17 
    18 //调用这个方法会出错,不能手动调用,系统不允许直接调用
    19 //    [self.customView drawRect:self.view.bounds];
    20 
    21     //当需要手动调用drawRect方法的时候,实际上就是通知父类重新绘图
    22     //setNeedsDisplay会异步自动调用drawRect方法
    23     [self.customView setNeedsDisplay];

    2、绘制线段、三角形、矩形、(椭)圆形、扇形

    //1.画一条线段
    - (void)drawLine:(CGContextRef)contextRef
    {
        //先给一个起点
        CGContextMoveToPoint(contextRef, 20, 100);
        //再给一个终点
        CGContextAddLineToPoint(contextRef, 200, 200);
        
        //设置线的状态
        //线宽
        CGContextSetLineWidth(contextRef, 10);
        
        //颜色
    //    CGContextSetRGBStrokeColor(contextRef, 0.4, 0.44, 0.99, 1.0);
        
        CGContextSetStrokeColorWithColor(contextRef, [UIColor redColor].CGColor);
        
        //风格设置
    //    CGContextSetLineCap(contextRef, kCGLineCapRound);
        
        CGFloat lengths[] = {20, 10, 30};
        
        /**
         *  绘制虚线
         *
         *  @param c#>       作用域 description#>
         *  @param phase#>   起点的左移量 description#>
         *  @param lengths#> 实线和虚线的长度 description#>
         *  @param count#>   实线和虚线的循环个数(count必须等于lengths数组的长度) description#>
         *
         *  @return nil
         */
        CGContextSetLineDash(contextRef, 50, lengths, 3);
        
        //将图形绘制到view上面来(渲染)
        CGContextStrokePath(contextRef);
        
    }
    //2.画三角形
    - (void)drawTriangle:(CGContextRef)contextRef
    {
        CGContextMoveToPoint(contextRef, 30, 50);
        
        CGContextAddLineToPoint(contextRef, 50, 200);
        
        //如果连续添加多条线,它会把上一条线的终点作为下一条线的起点(即折线)
        CGContextAddLineToPoint(contextRef, 150, 80);
        
        //连接起点和终点(封起来)
        CGContextClosePath(contextRef);
        
    //    CGContextAddLineToPoint(contextRef, 0, 0);
        
        //线宽
        CGContextSetLineWidth(contextRef, 10);
        
        //线的风格(拐角的风格)
        CGContextSetLineJoin(contextRef, kCGLineJoinRound);
        
        //
        CGContextSetStrokeColorWithColor(contextRef, [UIColor redColor].CGColor);
        
        //绘制边框内容
    //    CGContextStrokePath(contextRef);
    
        //设置填充色
        CGContextSetFillColorWithColor(contextRef, [UIColor grayColor].CGColor);
        
        //绘制实心内容
        CGContextFillPath(contextRef);
        
    }
    //3.画矩形
    - (void)drawRectangle:(CGContextRef)contextRef
    {
        CGContextAddRect(contextRef, CGRectMake(100, 100, 100, 100));
        
        CGContextSetStrokeColorWithColor(contextRef, [UIColor yellowColor].CGColor);
        
        CGContextSetLineWidth(contextRef, 10);
        
        //空心的(画线轨迹)
    //    CGContextStrokePath(contextRef);
        
        CGContextSetFillColorWithColor(contextRef, [UIColor greenColor].CGColor);
    
        //实心的
    //    CGContextFillPath(contextRef);
        
        //同时显示线框和填充
        CGContextDrawPath(contextRef, kCGPathFillStroke);
        
        //以上三种渲染方式,只能使用一种,如果都写,只执行最先写的那个
        
    }
    //4.画圆(椭圆)
    - (void)drawCircle:(CGContextRef)contextRef
    {
        CGContextAddEllipseInRect(contextRef, CGRectMake(100, 100, 200, 100));
        
        CGContextFillPath(contextRef);
        
    }
    //5.扇形
    - (void)drawArc:(CGContextRef)contextRef
    {
    //    CGContextMoveToPoint(contextRef, 100, 100);
        
        /**
         *  画扇形
         *
         *  @param contextRef   作用域
         *  @param x#>          原点x值(圆心) description#>
         *  @param y#>          原点y值(圆心) description#>
         *  @param radius#>     半径 description#>
         *  @param startAngle#> 开始的角度 description#>
         *  @param endAngle#>   结束的角度 description#>
         *  @param clockwise#>  方向(默认0顺时针) description#>
         *
         *  @return nil
         */
    //    CGContextAddArc(contextRef, 100, 100, 50, 0, M_PI_2, 0);
    //
    //    CGContextAddLineToPoint(contextRef, 100, 100);
    //    
    //    CGContextStrokePath(contextRef);
    
        CGContextFillPath(contextRef);
    //    
        //1.第一部分
        CGContextMoveToPoint(contextRef, 150, 150);
        
        CGContextAddArc(contextRef, 150, 150, 100, 0, 270 * M_PI / 180, 1);
        
        CGContextSetFillColorWithColor(contextRef, [UIColor cyanColor].CGColor);
        
        CGContextFillPath(contextRef);
        
        //2.第二部分
        CGContextMoveToPoint(contextRef, 150, 150);
        
        CGContextAddArc(contextRef, 150, 150, 100, 0, 120 * M_PI / 180, 0);
        
        CGContextSetFillColorWithColor(contextRef, [UIColor magentaColor].CGColor);
        
        CGContextFillPath(contextRef);
        
        CGContextMoveToPoint(contextRef, 150, 150);
        
        CGContextAddArc(contextRef, 150, 150, 100, 120 * M_PI / 180, 270 * M_PI / 180, 0);
        
        CGContextSetFillColorWithColor(contextRef, [UIColor yellowColor].CGColor);
        
        CGContextFillPath(contextRef);
    }

  • 相关阅读:
    调用控制台程序函数 RunProcess
    url传递中文的解决方案(备忘)
    Microsoft.SharePoint.SPException 安全性验证无效——错误解决
    Windows SharePoint Services 虚拟服务器没被配置为与 ASP.NET 2.0.50727.42 一起使用解决办法
    automation服务器不能创建对象
    InfoPath窗体事件列表说明和示例使用
    ORA01113:文件n需要介质恢复 (转载)
    DevExpress 第三方控件汉化的全部代码和使用方法 (转载)
    爱的感觉(转载)
    关于Oracle 01122,01110,01207的错误和解决(转载)
  • 原文地址:https://www.cnblogs.com/sea-star3/p/5142028.html
Copyright © 2020-2023  润新知