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];

}