线段的绘制
方式一
// 1.获取图形上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 2.描述路径
// 创建路径
CGMutablePathRef path = CGPathCreateMutable();
// 设置起点
// path:给哪个路径设置起点
CGPathMoveToPoint(path, NULL, 50, 50);
// 添加一根线到某个点
CGPathAddLineToPoint(path, NULL, 200, 200);
// 3.把路径添加到上下文
CGContextAddPath(ctx, path);
// 4.渲染上下文
CGContextStrokePath(ctx);
方式二
//1 获取上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//2 创建一个绘制的路径
CGMutablePathRef path = CGPathCreateMutable();
//画线
//(1)设置起始点
CGPathMoveToPoint(path, NULL, 50, 50);
//(2)设置目标点
CGPathAddLineToPoint(path, NULL, 200, 200);
CGPathAddLineToPoint(path, NULL, 50, 200);
//关闭路径和注释这句实现了一样的效果
// CGPathAddLineToPoint(path, NULL, 50, 50);
//关闭路径(将路径封闭起来)
CGPathCloseSubpath(path);
//3 将路径添加到上下文
CGContextAddPath(context, path);
//4 设置上下文的属性
//设置填充颜色
CGContextSetRGBFillColor(context, 250/255.0, 200/255.0, 50/255.0, 1.0);
//设置线条颜色
CGContextSetRGBStrokeColor(context, 65/255.0, 170/255.0, 50/255.0, 1.0);
//设置线条宽度
CGContextSetLineWidth(context, 30);
//设置线条转折点的样式
CGContextSetLineJoin(context, kCGLineJoinRound);
//5 渲染上下文
/*渲染模式:
kCGPathFill:填充(实心)
kCGPathStroke:只画线(空心)
kCGPathFillStroke:即画线又填充
*/
//使用了设置属性进行渲染
CGContextDrawPath(context, kCGPathFillStroke);
//6 释放路径
CGPathRelease(path);
方式三
// 获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 描述路径
// 设置起点
CGContextMoveToPoint(ctx, 50, 50);
CGContextAddLineToPoint(ctx, 200, 200);
// 渲染上下文
CGContextStrokePath(ctx);
方式四
//1 获取上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//2 添加多条线
CGPoint p0 = {50,50};
CGPoint p1 = {200,200};
CGPoint p2= {50,200};
CGPoint p3 = {50,50};
CGPoint points[] = {p0,p1,p2,p3};
CGContextAddLines(context, points, 4);
//3 设置属性
//---UIKit提供的设置颜色的方法--------
//设置线条颜色
[[UIColor redColor] setStroke];
//设置填充颜色
[[UIColor blueColor]setFill];
//4 绘制路径
CGContextDrawPath(context, kCGPathFillStroke);
方式五
// 贝瑟尔路径
// 创建路径
UIBezierPath *path = [UIBezierPath bezierPath];
// 设置起点
[path moveToPoint:CGPointMake(50, 50)];
// 添加一根线到某个点
[path addLineToPoint:CGPointMake(200, 200)];
// 绘制路径
[path stroke];
方式六
//画两根线段
//创建贝瑟尔路径
UIBezierPath *path = [UIBezierPath bezierPath];
//起点
[path moveToPoint:CGPointMake(50, 50)];
//终点
[path addLineToPoint:CGPointMake(200, 200)];
//线宽
path.lineWidth = 10;
//设置线条颜色和背景填充颜色均为红色
[[UIColor redColor] set];
[path stroke];
UIBezierPath *path1 = [UIBezierPath bezierPath];
[path1 moveToPoint:CGPointMake(0, 0)];
[path1 addLineToPoint:CGPointMake(30, 60)];
[[UIColor greenColor] set];
path1.lineWidth = 3;
[path1 stroke];
曲线的绘制
方式一
//S型曲线
//1 设置起始点
CGContextMoveToPoint(context, 20, 200);
//2 画贝塞尔曲线
//(1) 3个点
/*
CGContextAddCurveToPoint(<#CGContextRef _Nullable c#>, cp1x, cp1y, cp2x, cp2y, x, y)
<#CGContextRef _Nullable c#>:上下文
cp1x cp1y: 第一条切线的终点
cp2x cp2y: 第二条切线的起点
x y: 第二条切线的终点
*/
CGContextAddCurveToPoint(context, 100, 20, 200, 300, 300, 50);
//3设置属性
[[UIColor redColor] setStroke];
//4 渲染
CGContextDrawPath(context, kCGPathStroke);
方式二
//抛物线曲线
// 获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 描述路径
// 设置起点
CGContextMoveToPoint(ctx, 50, 50);
// cpx:控制点(这里是150,20)
CGContextAddQuadCurveToPoint(ctx, 150, 20, 250, 50);
[[UIColor whiteColor]setStroke];
// 渲染上下文
CGContextStrokePath(ctx);
矩形绘制
方式一
//----------第一种:core Graphics-----------
//1 获取上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//2 添加矩形
CGRect rect = CGRectMake(40, 40, 100, 200);
CGContextAddRect(context, rect);
//3 设置属性
[[UIColor redColor]setStroke];
[[UIColor orangeColor]setFill];
//4 绘制
CGContextDrawPath(context, kCGPathFillStroke);
方式二
//----------第二种:UIKit- 提供绘制矩形的函数 (已经封装好的)----------
[[UIColor redColor]setStroke];
[[UIColor orangeColor]setFill];
CGRect rect = CGRectMake(40, 40, 100, 200);
//绘制线条矩形(空心)
// UIRectFrame(rect);
//绘制填充的矩形(实心)
UIRectFill(rect);
方式三
// 圆角矩形
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(20, 20, 200, 200) cornerRadius:8];
//注意:如果矩形为正方形,cornerRadius的值为边长的一半,就变成了圆形
//设置线条的颜色
[[UIColor whiteColor]setStroke];
//设置填充颜色
[[UIColor whiteColor]setFill];
//渲染
[path stroke];
[path fill];
绘制圆弧、圆(椭圆)、扇形
// 绘制圆弧
/**
*
*
* @param context 上下文
* @param x#> 圆的中心点坐标x description#>
* @param y#> 圆的中心点坐标y description#>
* @param radius#> 圆的半径 description#>
* @param startAngle#> 开始的角度 description#>
* @param endAngle#> 结束的角度 description#>
* @param clockwise#> 画的方向 0 顺时针 1 逆时针
*/
CGContextAddArc(context, 160, 100, 100, 0, M_PI_4, 0);
//设置属性
[[UIColor redColor]setStroke];
//绘制
CGContextDrawPath(context, kCGPathStroke);
// 绘制扇形
CGPoint center = CGPointMake(125, 125);
UIBezierPath *path = [UIBezierPath
// Center:圆心
// startAngle:弧度
// clockwise:YES:顺时针 NO:逆时针
bezierPathWithArcCenter:center radius:100 startAngle:0 endAngle:M_PI_2 clockwise:YES];
// 添加一根线到圆心
[path addLineToPoint:center];
// 封闭路径,关闭路径:从路径的终点到起点
[path closePath];
//渲染
[path stroke];
//绘制内切圆(椭圆)
CGRect rect = CGRectMake(50, 50, 200, 100);
//注意:如果为正方形,则画出的是圆形;为长方形,则为椭圆
//设置属性
[[UIColor blackColor]setStroke];
[[UIColor orangeColor]setFill];
//绘制线条矩形
//UIRectFrame(rect);
//根据矩形绘制的椭圆(我这里画的是椭圆)
CGContextAddEllipseInRect(context, rect);
//绘制
CGContextDrawPath(context, kCGPathFillStroke);
提示:绘制弧、扇形的方法可以实现本节的所有图形哦
绘制图片
方式一
UIImage *image = [UIImage imageNamed:@"1.jpg"];
//一 UIKit提供的方法
//1 指定一个点来绘制图片 (锚点)
[image drawAtPoint:CGPointMake(50, 50)];
//2 指定一个矩形范围来绘制 (拉伸填充)
// [image drawInRect:CGRectMake(0, 0, 300, 200)];
//3 指定一个矩形范围平铺绘制
// [image drawAsPatternInRect:CGRectMake(0, 0, 300, 200)];
方式二
//二 core graphics 提供的函数
CGContextRef context = UIGraphicsGetCurrentContext();
UIImage *image = [UIImage imageNamed:@"1.jpg"];
//1 保存上下文状态
CGContextSaveGState(context);
//2 切换坐标系
Quartz 2D的坐标系(与数学的二维坐标系一样)----->UIKit的坐标系
//(1)向上平移一个高度
CGContextTranslateCTM(context, 0, 200);
//(2)改变y轴的方向 (缩放y的坐标,使其方向反转)
CGContextScaleCTM(context, 1, -1);
//3 图片绘制
CGContextDrawImage(context, CGRectMake(0, 0, 300, 200), image.CGImage);
//4 恢复到之前保存的上下文状态
CGContextRestoreGState(context);
绘制文字
// 绘制文字
NSString *str = @"asfdsfsdf";
// 文字的起点
// Attributes:文本属性
NSMutableDictionary *textDict = [NSMutableDictionary dictionary];
// 设置文字颜色
textDict[NSForegroundColorAttributeName] = [UIColor redColor];
// 设置文字字体
textDict[NSFontAttributeName] = [UIFont systemFontOfSize:30];
// 设置文字的空心颜色和宽度
textDict[NSStrokeWidthAttributeName] = @3;
textDict[NSStrokeColorAttributeName] = [UIColor yellowColor];
// 创建阴影对象
NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor greenColor];
shadow.shadowOffset = CGSizeMake(4, 4);
shadow.shadowBlurRadius = 3;
textDict[NSShadowAttributeName] = shadow;
// 富文本:给普通的文字添加颜色,字体大小
[str drawAtPoint:CGPointZero withAttributes:textDict];
}