//自定义绘制图形,调用drawRect方法
- (void)drawRect:(CGRect)rect {
//首先拿到上下文
CGContextRef context = UIGraphicsGetCurrentContext();
// [self drawLine:context];
}
#pragma mark - 绘制线条
- (void)drawLine:(CGContextRef)context
{
//1.获取上下文
//context
//2.创建绘制的路径(path)
//路径
//CGPathRef 不可变
//CGMutablePathRef 可变路径
CGMutablePathRef path = CGPathCreateMutable();
//设置起始点
CGPathMoveToPoint(path, NULL, 50, 50);
//连线到下一点
CGPathAddLineToPoint(path, NULL, 200, 200);
CGPathAddLineToPoint(path, NULL, 50, 200);
//关闭路径
CGPathCloseSubpath(path);
//3.把路径添加到上下文中
CGContextAddPath(context, path);
//4.设置上下文的属性
//线条的颜色
CGContextSetRGBStrokeColor(context, 41/255.0, 110/255.0, 222/255.0, 1);
//填充的颜色
CGContextSetRGBFillColor(context, 150/255.0, 50/255.0, 100/255.0, 1);
//线条宽度
CGContextSetLineWidth(context, 5);
//连接点的样式
CGContextSetLineJoin(context, kCGLineJoinRound);
//5.绘制路径
/*
kCGPathFill, //只填充
kCGPathEOFill, //异或
kCGPathStroke, //只画线
kCGPathFillStroke, //填充和画线
kCGPathEOFillStroke
*/
CGContextDrawPath(context, kCGPathFillStroke);
//6.释放路径
CGPathRelease(path);
}
#pragma mark - 绘制矩形
- (void)drawShapeRect:(CGContextRef)context
{
//方法一
/*
//设置绘制的区域
CGRect rect = CGRectMake(40, 40, 100, 200);
//设置区域添加到上下文
CGContextAddRect(context, rect);
//UIKit封装的设置颜色的方法
[[UIColor redColor] setStroke];
[[UIColor blueColor] setFill];
//绘制
CGContextDrawPath(context, kCGPathFillStroke);
*/
//方法二
//UIKit
CGRect rect = CGRectMake(40, 40, 100, 200);
[[UIColor redColor] setStroke];
[[UIColor blueColor] setFill];
//调用,直接开始绘图
UIRectFill(rect); //填充
UIRectFrame(rect); //框架
}
#pragma mark - 绘制圆形
- (void)drawCircle:(CGContextRef)context
{
//圆
/*
* x,y 圆心
* radius 半径
* startAngle endAngle 起始和结束的角度(单位 弧度)
* clockwise 顺时针 0 / 逆时针 1
*/
//CGContextAddArc(context, 160, 200, 50, 0, M_PI_2, 1);
//内切圆
CGRect rect = CGRectMake(50, 50, 200, 100);
[[UIColor orangeColor] setStroke];
UIRectFrame(rect);
CGContextAddEllipseInRect(context, CGRectMake(50, 50, 200, 100));
[[UIColor redColor] setStroke];
[[UIColor brownColor] setFill];
CGContextDrawPath(context, kCGPathFillStroke);
}
#pragma mark - 贝塞尔曲线
- (void)drawCurve:(CGContextRef)context
{
//起始点
CGContextMoveToPoint(context, 20, 50);
/*
* 1x, 1y 第一条切线的终点
* 2x, 2y 第二条切线的起始点
* x, y 第二条切线的终点
*/
// CGContextAddCurveToPoint(context, 100, 20, 200, 300, 300, 50);
CGContextAddQuadCurveToPoint(context, 160, 20, 300, 200);
CGContextDrawPath(context, kCGPathStroke);
}
#pragma mark - 绘制文本
- (void)drawText:(CGContextRef)context
{
//1.绘制的文字
NSString *str = @"wxhl34";
//2.定义绘制的区域
CGRect rect = CGRectMake(50, 50, 200, 50);
UIRectFrame(rect);
//3.设置绘制的样式
//文本段落的样式
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
style.lineBreakMode = NSLineBreakByCharWrapping;
style.alignment = NSTextAlignmentRight;
NSDictionary *attr = @{
NSFontAttributeName:[UIFont systemFontOfSize:20],
NSParagraphStyleAttributeName:style
};
//4.绘制
[str drawInRect:rect withAttributes:attr];
}
#pragma mark - 绘制图片
- (void)drawImage:(CGContextRef)context
{
//图片
UIImage *image = [UIImage imageNamed:@"baymax.jpg"];
//1.以指定点为起点绘制
[image drawAtPoint:CGPointMake(20, 400)];
//2.在指定区域绘制,会自动拉伸
//[image drawInRect:CGRectMake(0, 0, 100, 200)];
//坐标系转换
//CG UIKit
//保存当前的上下文
CGContextSaveGState(context);
//CGContextTranslateCTM(context, 0, 200);
//y轴取反
CGContextScaleCTM(context, 1, -1);
//y轴上移200
CGContextTranslateCTM(context, 0, -200);
/*
CGContextRotateCTM(context, M_PI); //旋转
CGContextScaleCTM(context, -1, 1); //缩放
CGContextTranslateCTM(context, 0, -200); //平移
*/
//CG
//UIImage --> CGImageRef
//UIKit Core Graphics AppKit
CGContextDrawImage(context, CGRectMake(0, 0, 320, 200), image.CGImage);
//恢复之前保存的上下文
CGContextRestoreGState(context);
}