• iOS 画图讲解


    5、画图

    (1)画线

    //绘图代码写在drawRect里,view加载完成,需要显示的时候调用

    //1、获取图形上下文 2、创建路径 3、把图形放入上下文 4、渲染上下文

    //drawRect的rect是绘制View的bounds

    //重绘

    [self setNeedsDisplay];

    set =  setStroke(描边) + setFill(填充)

    //方法一:最原始的方法

        

    //1、获取图形上下文,CG,CoreGraphics,有关图形的框架,开发mac也可以用    

    CGContextRef ctx = UIGraphicsGetCurrentContext();

        

    //2、创建路径    

    CGMutablePathRef path = CGPathCreateMutable();

        

    //设置起始点

    CGPathMoveToPoint(path, NULL, 50, 50);

        

    //画线到某一点

    CGPathAddLineToPoint(path, NULL, 200, 200);

        

    //3、把图形放入上下文    

    CGContextAddPath(ctx, path);

        

    //4、渲染上下文    

    CGContextStrokePath(ctx);

    //绘图的第二种方法

    - (void)drawLine2 {

        

        CGContextRef ctx = UIGraphicsGetCurrentContext();

        

        //设置起始点

        CGContextMoveToPoint(ctx, 50, 50);

        

        //画线并设置终点

        CGContextAddLineToPoint(ctx, 200, 200);

        

        //渲染上下文

        CGContextStrokePath(ctx);

    }

    //第三种方法

    - (void)drawLine3 {

    //贝塞尔线,UIKit

    //创建路径

        

    UIBezierPath * path = [UIBezierPath bezierPath];

        

    //设置起点

    [path moveToPoint:CGPointMake(50, 50)];

        

    //画线并设置终点

    [path addLineToPoint:CGPointMake(200, 200)];

        

    //绘制路径

    [path stroke];

    }

    //属性

    - (void)drawCtxState {

        

        CGContextRef ctx = UIGraphicsGetCurrentContext();

        

        CGContextMoveToPoint(ctx, 50, 50);

        

        CGContextAddLineToPoint(ctx, 100, 50);

        

        //    CGContextMoveToPoint(ctx, 80, 60);

        

        //默认下一根线的起点就是上一根线的终点

        CGContextAddLineToPoint(ctx, 100, 200);

        

        //设置线宽度

        CGContextSetLineWidth(ctx, 5);

        

        //设置连接样式

        CGContextSetLineJoin(ctx, kCGLineJoinRound);

        

        //设置顶角样式

        CGContextSetLineCap(ctx, kCGLineCapRound);

        

        //设置线的颜色

        [[UIColor redColor] setStroke];

        

        CGContextStrokePath(ctx);

    }

    //画曲线

    - (void)drawRect:(CGRect)rect {

    // Drawing code

    CGContextRef ctx = UIGraphicsGetCurrentContext();

        

    CGContextMoveToPoint(ctx, 50, 50);

        

    //画曲线 arg1 上下文  arg2,3 控制点x,y   arg4,5 终点x,y

    CGContextAddQuadCurveToPoint(ctx, 100, 100, 250, 50);

        

    CGContextStrokePath(ctx);

    }

     

    (2)画图形

    //画矩形

    UIBezierPath * path = [UIBezierPath bezierPathWithRect:CGRectMake(20, 20, 200, 200)];

        

    //画圆角矩形

    UIBezierPath * path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(20, 20, 200, 200) cornerRadius:100];

        

    //画圆弧

    //Center 圆弧中心

    //radius 圆弧半径

    //startAngle 起始角度

    //endAngle 结束角度

    //clockwise YES 顺时针  NO 逆时针

    CGPoint center = CGPointMake(125, 125);

        

    UIBezierPath * path = [UIBezierPath bezierPathWithArcCenter:center radius:100 startAngle:0 endAngle:M_PI_2 clockwise:NO];

        

    [path addLineToPoint:center];

        

    //封闭路径

    [path closePath];

        

    [path stroke];

        

    //要使用setFill,路径一定是封闭的

    [[UIColor greenColor] setFill];

        

    [path fill];

        

    //画椭圆

        UIBezierPath * path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(20, 50, 200, 100)];

        

        [path stroke];

        

    }

    6、绘制图片和文字

    (1)绘制图片

    - (void)drawPicture {

        

    //图片裁剪,超出部分全部剪掉

    UIRectClip(CGRectMake(0, 0, 50, 50));

        

    UIImage * image = [UIImage imageNamed:@"01"];

        

    //根据rect拉伸图片

    [image drawInRect:CGRectMake(0, 0, 100, 100)];

    [image drawInRect:rect];

        

    //显示原图片尺寸

    [image drawAtPoint:CGPointZero];

        

    //平铺绘图

    [image drawAsPatternInRect:rect];

    }

    (2)绘制文字

     

    - (void)drawRect:(CGRect)rect {

        // Drawing code

        NSString * string = @"hgfdagskjhdcadkhdkjlashkdklhahgfdagskjhdcad";

        

        NSShadow * shadow = [[NSShadow alloc] init];

        shadow.shadowColor = [UIColor yellowColor];

        shadow.shadowOffset = CGSizeMake(5, 5);

        //模糊度

        shadow.shadowBlurRadius = 3;

        

        NSDictionary * dict = @{NSFontAttributeName:[UIFont systemFontOfSize:30],

                                NSForegroundColorAttributeName:[UIColor redColor],

                                NSStrokeColorAttributeName:[UIColor blueColor],

                                NSStrokeWidthAttributeName:@(2),

                                NSShadowAttributeName: shadow};

        

        //不会换行

        [string drawAtPoint:CGPointZero withAttributes:nil];

        

        [string drawInRect:rect withAttributes:dict];

    }

    5、画图

    (1)画线

    //绘图代码写在drawRect里,view加载完成,需要显示的时候调用

    //1、获取图形上下文 2、创建路径 3、把图形放入上下文 4、渲染上下文

    //drawRect的rect是绘制View的bounds

    //重绘

    [self setNeedsDisplay];

    set =  setStroke(描边) + setFill(填充)

    //方法一:最原始的方法

        

    //1、获取图形上下文,CG,CoreGraphics,有关图形的框架,开发mac也可以用    

    CGContextRef ctx = UIGraphicsGetCurrentContext();

        

    //2、创建路径    

    CGMutablePathRef path = CGPathCreateMutable();

        

    //设置起始点

    CGPathMoveToPoint(path, NULL, 50, 50);

        

    //画线到某一点

    CGPathAddLineToPoint(path, NULL, 200, 200);

        

    //3、把图形放入上下文    

    CGContextAddPath(ctx, path);

        

    //4、渲染上下文    

    CGContextStrokePath(ctx);

    //绘图的第二种方法

    - (void)drawLine2 {

        

        CGContextRef ctx = UIGraphicsGetCurrentContext();

        

        //设置起始点

        CGContextMoveToPoint(ctx, 50, 50);

        

        //画线并设置终点

        CGContextAddLineToPoint(ctx, 200, 200);

        

        //渲染上下文

        CGContextStrokePath(ctx);

    }

    //第三种方法

    - (void)drawLine3 {

    //贝塞尔线,UIKit

    //创建路径

        

    UIBezierPath * path = [UIBezierPath bezierPath];

        

    //设置起点

    [path moveToPoint:CGPointMake(50, 50)];

        

    //画线并设置终点

    [path addLineToPoint:CGPointMake(200, 200)];

        

    //绘制路径

    [path stroke];

    }

    //属性

    - (void)drawCtxState {

        

        CGContextRef ctx = UIGraphicsGetCurrentContext();

        

        CGContextMoveToPoint(ctx, 50, 50);

        

        CGContextAddLineToPoint(ctx, 100, 50);

        

        //    CGContextMoveToPoint(ctx, 80, 60);

        

        //默认下一根线的起点就是上一根线的终点

        CGContextAddLineToPoint(ctx, 100, 200);

        

        //设置线宽度

        CGContextSetLineWidth(ctx, 5);

        

        //设置连接样式

        CGContextSetLineJoin(ctx, kCGLineJoinRound);

        

        //设置顶角样式

        CGContextSetLineCap(ctx, kCGLineCapRound);

        

        //设置线的颜色

        [[UIColor redColor] setStroke];

        

        CGContextStrokePath(ctx);

    }

    //画曲线

    - (void)drawRect:(CGRect)rect {

    // Drawing code

    CGContextRef ctx = UIGraphicsGetCurrentContext();

        

    CGContextMoveToPoint(ctx, 50, 50);

        

    //画曲线 arg1 上下文  arg2,3 控制点x,y   arg4,5 终点x,y

    CGContextAddQuadCurveToPoint(ctx, 100, 100, 250, 50);

        

    CGContextStrokePath(ctx);

    }

     

    (2)画图形

    //画矩形

    UIBezierPath * path = [UIBezierPath bezierPathWithRect:CGRectMake(20, 20, 200, 200)];

        

    //画圆角矩形

    UIBezierPath * path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(20, 20, 200, 200) cornerRadius:100];

        

    //画圆弧

    //Center 圆弧中心

    //radius 圆弧半径

    //startAngle 起始角度

    //endAngle 结束角度

    //clockwise YES 顺时针  NO 逆时针

    CGPoint center = CGPointMake(125, 125);

        

    UIBezierPath * path = [UIBezierPath bezierPathWithArcCenter:center radius:100 startAngle:0 endAngle:M_PI_2 clockwise:NO];

        

    [path addLineToPoint:center];

        

    //封闭路径

    [path closePath];

        

    [path stroke];

        

    //要使用setFill,路径一定是封闭的

    [[UIColor greenColor] setFill];

        

    [path fill];

        

    //画椭圆

        UIBezierPath * path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(20, 50, 200, 100)];

        

        [path stroke];

        

    }

    6、绘制图片和文字

    (1)绘制图片

    - (void)drawPicture {

        

    //图片裁剪,超出部分全部剪掉

    UIRectClip(CGRectMake(0, 0, 50, 50));

        

    UIImage * image = [UIImage imageNamed:@"01"];

        

    //根据rect拉伸图片

    [image drawInRect:CGRectMake(0, 0, 100, 100)];

    [image drawInRect:rect];

        

    //显示原图片尺寸

    [image drawAtPoint:CGPointZero];

        

    //平铺绘图

    [image drawAsPatternInRect:rect];

    }

    (2)绘制文字

     

    - (void)drawRect:(CGRect)rect {

        // Drawing code

        NSString * string = @"hgfdagskjhdcadkhdkjlashkdklhahgfdagskjhdcad";

        

        NSShadow * shadow = [[NSShadow alloc] init];

        shadow.shadowColor = [UIColor yellowColor];

        shadow.shadowOffset = CGSizeMake(5, 5);

        //模糊度

        shadow.shadowBlurRadius = 3;

        

        NSDictionary * dict = @{NSFontAttributeName:[UIFont systemFontOfSize:30],

                                NSForegroundColorAttributeName:[UIColor redColor],

                                NSStrokeColorAttributeName:[UIColor blueColor],

                                NSStrokeWidthAttributeName:@(2),

                                NSShadowAttributeName: shadow};

        

        //不会换行

        [string drawAtPoint:CGPointZero withAttributes:nil];

        

        [string drawInRect:rect withAttributes:dict];

    }

  • 相关阅读:
    JDK Integer.reverse 算法实现分析
    HomeBrew更新
    时序数据简介
    MQTT协议简析
    Maven+Spring Profile实现生产环境和开发环境的切换
    Thread与Runnable的一个小陷阱
    HashMap的内部实现机制,Hash是怎样实现的,什么时候ReHash
    该不该在C#中使用var关键词
    疑难问题解决备忘录(3)——ubuntu12.04配置vsftp本地用户登录
    疑难问题解决备忘录(2)——ubuntu12.04分配swap
  • 原文地址:https://www.cnblogs.com/PSSSCode/p/5272060.html
Copyright © 2020-2023  润新知