第一:通过路径来画图 - 步骤 -- 这个是比较复杂的方式
//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);
}