美文网首页
上下文画图-总结

上下文画图-总结

作者: zhoushujian | 来源:发表于2016-10-07 14:43 被阅读356次

    第一:通过路径来画图 - 步骤 -- 这个是比较复杂的方式

    //0. 找到图形上下文-Context (所有的路径都要画到图形上下文中)
        CGContextRefcontext = UIGraphicsGetCurrentContext();
         //1.创建一个可变的路径
       CGMutablePathRef mutablePath =CGPathCreateMutable();
         //2. 在该可变路径中添加了一个矩形路径
       CGPathAddRect(mutablePath, nil, CGRectMake(100, 100,100, 100));
        //3.将该可变路径添加到上下文
       CGContextAddPath(context, mutablePath);
        //
    4.-------- 将路径绘制出来draw (上下文负责) --------
        CGContextDrawPath(context, kCGPathStroke);
        //5.关闭路径
       CGPathRelease(mutablePath);
    

    第二种画矩形的方式

    //这种方式不需要关闭路径
     CGContextRefcontext = UIGraphicsGetCurrentContext();
        CGContextAddRect(context, CGRectMake(100, 100, 150, 150));
        CGContextDrawPath(context, kCGPathStroke);
    /**
     1. 当我们需要自定义绘制的内容时, 重写drawRect: 方法(不能直接调用drawRect:)
     2. 当我们需要刷新界面的内容(重新绘制时), 调用setNeedsDisplay方法
     */
    - (void)setTitle:(NSString *)title{
       _title = title;
        //重新调用drawRect
        [self setNeedsDisplay];
    }
    - (void)drawRect:(CGRect)rect{
       // [@"zhoushujian" drawInRect:CGRectMake(100, 100, 100, 23)
    withAttributes:nil];
      //  [self drawImage:rect];
    }
    

    绘图片

    - (void)drawImage:(CGRect)rect{
        //图片的绘制
        //确定图片的size,在该size当中进行绘制
      UIImage*image = [UIImage imageNamed:@"帅哥.jpg"];
        //对图片进行绘制,drawInRect:会对图片进行拉伸,
        [imagedrawInRect:CGRectMake(100, 100,image.size.width,image.size.height)];
      NSString*context = @"云霞宝宝,我想你";
        NSMutableParagraphStyle*paragraph = [NSMutableParagraphStyle new];
        //居中对齐
        paragraph.alignment= NSTextAlignmentCenter;
       NSDictionary *dict = @{
                         NSFontAttributeName:[UIFont
    systemFontOfSize:20],
                         NSForegroundColorAttributeName:[UIColor redColor];
                         NSParagraphStyleAttributeName:paragraph
                         };
        [context drawInRect:CGRectMake(0, 280, rect.size.width,
    rect.size.height)
    withAttributes:dict];
    }
    

    字符串绘制

    - (void)drawString:(CGRect)rect{
        //字符串的绘制
      NSString*context = @"好好学习,天天上炕";
       NSShadow *shadow = [NSShadow
    new];
        //阴影偏移量,阴影颜色
        shadow.shadowOffset = CGSizeMake(50, 50);
        shadow.shadowColor = [UIColor
    grayColor];
        //高斯模糊
        shadow.shadowBlurRadius= 5;
        //创建一个段落
        NSMutableParagraphStyle*paragraph = [NSMutableParagraphStyle new];
        //文本居中对齐
        paragraph.alignment= NSTextAlignmentCenter;
        //最常用的几个属性: 前景色, 字体类型, 段落样式(文本居中对齐):用字典
      NSDictionary *dict = @{                  
      //设置文本字体类型
                         NSFontAttributeName:[UIFont systemFontOfSize:35],   
      //设置字体颜色
                         NSForegroundColorAttributeName:[UIColor redColor];                
      //段落样式
                       NSParagraphStyleAttributeName:paragraph,                 
      //设置背影
                        NSShadowAttributeName:shadow,         
      //配置背影描边颜色
                         NSStrokeColorAttributeName:[UIColor grayColor]
                         };
        [context  drawInRect:CGRectMake(0, 200, rect.size.width,400) withAttributes:dict];
    }
    

    画一个测试效果

    - (void)drawTest{
        CGContextRefcontext = UIGraphicsGetCurrentContext();
        //设置颜色
        [[UIColor redColor] set];
      //宽度
        CGContextSetLineWidth(context, 50);
        //设置线段顶点样式
        CGContextSetLineCap(context, kCGLineCapRound);
        //设置连接点的样式
        CGContextSetLineJoin(context, kCGLineJoinRound);
        //设置阴影状态  最后一个参数是模糊值,
        CGContextSetShadow(context, CGSizeMake(50, 50), 10);
        //画起点
        CGContextMoveToPoint(context, 100, 100); 
      //画线
        CGContextAddLineToPoint(context, 200, 200);
      //渲染
        CGContextDrawPath(context, kCGPathStroke);
        //设置另一根线的颜色
        [[UIColor blueColor] set];
    //设置另一根线
        CGContextMoveToPoint(context, 200, 200);
        CGContextAddLineToPoint(context,200, 100);
        //封闭路径
        //CGContextClosePath(context);
      //渲染
        CGContextDrawPath(context, kCGPathStroke);
    }
    

    虚线

    - (void)drawXuXian{
        // [self  drawJuXing];
        CGContextRefcontext = UIGraphicsGetCurrentContext();
        //设置线条宽度
        CGContextSetLineWidth(context, 50);
        //设置起点
        CGContextMoveToPoint(context, 100, 100);
      //连线
        CGContextAddLineToPoint(context, 300, 100);
        //创建一个数组
       CGFloat length[] = {4,6,5,6,8,9};
       /**
         * 虚线开始绘制的地方, 距离起始位置20
         * 虚线获取的间隙, 数组
         * 数组的个数
      */
       CGContextSetLineDash(context,0, length, 6);
      //渲染
        CGContextDrawPath(context, kCGPathStroke);
    }
    

    画矩形

    - (void)drawJuXing{
        //0.找到图形上下文-Context (所有的路径都要画到图形上下文中)
        CGContextRefcontext = UIGraphicsGetCurrentContext();
        //描边颜色
        [[UIColor redColor] setFill];
        //1.创建一个可变的路径
       CGMutablePathRef mutablePath =CGPathCreateMutable();
        //2.在该可变路径中添加了一个矩形路径
       CGPathAddRect(mutablePath, nil, CGRectMake(100, 100,100, 100));
        //3.将该可变路径添加到上下文
       CGContextAddPath(context, mutablePath);
        //
    4.-------- 将路径绘制出来draw (上下文负责) --------
        CGContextDrawPath(context, kCGPathFill);
        //5.关闭路径
       CGPathRelease(mutablePath);
       /*第二种方式画矩形
      CGContextRef context = UIGraphicsGetCurrentContext();
      CGContextAddRect(context, CGRectMake(100, 100, 150, 150));
      CGContextDrawPath(context, kCGPathStroke);
      */
       /*
         //画两个矩形,描述奇偶填充
      CGContextRef context = UIGraphicsGetCurrentContext();
      CGContextAddRect(context, CGRectMake(50, 50, 200, 300));
      CGContextAddRect(context, CGRectMake(100, 100, 200, 300));
      CGContextDrawPath(context, kCGPathEOFillStroke);
      */
    }
    

    画圆弧

    - (void)drawYuanHu{
        //画圆弧
        //0 ,找到图形上下文-context
        //-------- 绘制弧线(椭圆, 再确定角度, 就可以裁剪出弧线)--------
        //* Quartz 2D 最初是为macOS而设计, 后继再引用到iOS
        //* Quartz 2D 的坐标系是以左下解为原点, 而UIKit是以左上角为原点
        //* 沿X轴是翻译过来的
       /**
         *  绘制弧线
         * x 与y 确定圆心
         * raduis 确定半径
         * startAngle 与endAngle 确定了弧度度数
         * clockwise 顺逆时针, 1顺时针, 0是逆时针
      */
        CGContextRefcontext = UIGraphicsGetCurrentContext();
       CGContextAddArc(context, 200,
    200, 100,
    M_PI*2,M_PI_2, 0);
        CGContextDrawPath(context, kCGPathStroke);
    }
    

    画圆

    - (void)drawYuan{
        //0.找到图形上下文-Context (所有的路径都要画到图形上下文中)
        CGContextRefcontext = UIGraphicsGetCurrentContext();
        //1.路径
        CGContextAddEllipseInRect(context, CGRectMake(100, 100, 100, 150));
        //2.将路径绘制出来
        CGContextDrawPath(context, kCGPathStroke);
       /*
      typedef CF_ENUM (int32_t, CGPathDrawingMode) {
         kCGPathFill,  填充
         kCGPathEOFill, 奇偶填充
         kCGPathStroke, 描边
         kCGPathFillStroke, 既描边又填充
         kCGPathEOFillStroke  ,奇偶填充
      };
      */
    }
    

    画线

    - (void)drawLine{
        CGContextRefcontext = UIGraphicsGetCurrentContext();
        //1. 确定起点(移动到某个点)
        CGContextMoveToPoint(context, 100, 100);
        //2. 连接当前点到起点
        CGContextAddLineToPoint(context, 200, 200);
        //3. 再画一条线
        CGContextAddLineToPoint(context, 100, 300);
        CGContextAddLineToPoint(context, 0, 200);
        //关闭路径就是形成一个回路-如果不关闭的话,就是一个开路
        CGContextClosePath(context);
      //渲染
        CGContextDrawPath(context, kCGPathStroke);
    }
    

    相关文章

      网友评论

          本文标题:上下文画图-总结

          本文链接:https://www.haomeiwen.com/subject/ltpyyttx.html