#import <UIKit/UIKit.h>
@interface Myview : UIView
@end
#import "Myview.h"
@implementation Myview
- (void)drawRect:(CGRect)rect {
//绘制步骤
/*
1.获取绘制的对象(上下文)(画布、纸)
2.创建绘图的路径
3.将路径添加到绘制对象(上下文)上
4.设置绘制的属性:线条的颜色、线条的宽度、线条锯尺,裁剪区域、、、
5.绘制
(6.释放路径)
*/
//绘制线条
// 1.获取绘制的对象(上下文)(画布、纸)
CGContextRef context = UIGraphicsGetCurrentContext();
//绘制线条1
// [self drawLine1:context];
// 绘制线条2
// [self drawLine2:context];
// 绘制矩形
// [self drawRt:context];
// 绘制圆弧
[self drawArc:context];
// 绘制贝塞尔曲线
// [self drawCure:context];
//绘制文字
// [self drawWord:context];
// 绘制图片
// [self drawImgView:context];
}
#pragma mark - 绘制图片
- (void)drawImgView:(CGContextRef)context {
UIImage *img = [UIImage imageNamed:@"1.jpg"];
//UIKit中提供了三种绘图方法
//方式一:指定绘图的位置,大小有图片决定
// [img drawAtPoint:CGPointMake(90, 90)];
//方式二:指定图片的大小和位置,这种方式图片会被拉伸
// [img drawInRect:CGRectMake(50, 50, 290, 290)];
//方式三:这种方式图片会被平铺
// [img drawAsPatternInRect:CGRectMake(50, 50, 290, 290)];
//在绘图之前应该转换坐标体系
//保存原有的坐标体系
CGContextSaveGState(context);
/*
//(1)顺时针旋转180度
CGContextRotateCTM(context, M_PI);
//(2)缩放x和Y轴
CGContextScaleCTM(context, -1, 1);
//(3)平移图片
CGContextTranslateCTM(context, 0, -200);
*/
CGContextScaleCTM(context, 1, -1);
CGContextTranslateCTM(context, 0, -200);
//使用Core Graphic绘制图像
CGContextDrawImage(context, CGRectMake(0, 0, 200, 200), img.CGImage);
//还原坐标体系
CGContextRestoreGState(context);
}
#pragma mark - 绘制文字
- (void)drawWord:(CGContextRef)context {
//设置绘制的内容
NSString *text = @"今天中午吃什么呢";
// 设置绘制区域
CGRect rect = CGRectMake(50, 50, 200, 50);
//绘制矩形
UIRectFrame(rect);
/*
//设置字体的属性
NSDictionary *dic = @{
NSFontAttributeName:[UIFont systemFontOfSize:18]
};
[text drawWithRect:rect options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil];
*/
[[UIColor redColor] set];
[text drawInRect:rect withFont:[UIFont systemFontOfSize:20] lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentCenter];
}
#pragma mark - 绘制贝塞尔曲线
- (void)drawCure:(CGContextRef)context {
//设置起点
CGContextMoveToPoint(context, 20, 200);
//添加曲线
// CGContextAddCurveToPoint(context, 100, 20, 200, 300, 300, 50);
CGContextAddQuadCurveToPoint(context, 10, 20, 300, 20);
//绘制
CGContextDrawPath(context, kCGPathStroke);
}
#pragma mark - 绘制圆弧
- (void)drawArc:(CGContextRef)context {
/*
context:上下文
x,y :圆心
radius:半径
startAngle:其实角度
endAngle:结束角度
clockwise:角度旋转方向 0:顺时针 1:逆时针
*/
/*
CGContextAddArc(context, 150, 150, 90, 0, M_PI*2, 1);
//设置线条的颜色
[[UIColor redColor] setStroke];
//设置填充色
[[UIColor greenColor] setFill];
//绘制
CGContextDrawPath(context, kCGPathFillStroke);
*/
//绘制椭圆
CGRect rect = CGRectMake(90, 90, 200, 100);
UIRectFrame(rect);
//设置线条的颜色
[[UIColor cyanColor] setStroke];
//利用矩形绘制内切圆
CGContextAddEllipseInRect(context, rect);
//绘制
CGContextDrawPath(context, kCGPathStroke);
}
#pragma mark - 绘制矩形
- (void)drawRt:(CGContextRef)context {
/*
//1.context 上下文
//2.设置矩形的大小和位置
CGRect rect = CGRectMake(50, 50, 100, 100);
//3.在context上添加矩形
CGContextAddRect(context, rect);
//4.设置绘制的属性
//设置线条的颜色
[[UIColor redColor] setStroke];
[[UIColor cyanColor] setFill];
//设置线条的宽度
CGContextSetLineWidth(context, 2);
//设置线条连接点的样式
CGContextSetLineJoin(context, kCGLineJoinRound);
//5.绘制
CGContextDrawPath(context, kCGPathFillStroke);
*/
//使用UIKit中绘制矩形的方法
CGRect rect = CGRectMake(50, 50, 100, 100);
[[UIColor greenColor] setFill];
[[UIColor redColor] setStroke];
//绘制矩形的线条
UIRectFrame(rect);
//绘制矩形区域
// UIRectFill(rect);
}
#pragma mark - 绘制线条2
- (void)drawLine2:(CGContextRef)context {
//1.获取上下文
// context
//2.设置绘图的路径
CGPoint p1 = CGPointMake(20, 20);
CGPoint p2 = CGPointMake(120, 20);
CGPoint p3 = CGPointMake(120, 100);
CGPoint p4 = CGPointMake(20, 100);
CGPoint p5 = CGPointMake(20, 20);
CGPoint points[] = {p1,p2,p3,p4,p5};
CGContextAddLines(context, points, 5);
//4.设置绘制属性
//设置线条的颜色和填充色
// CGContextSetRGBFillColor(<#CGContextRef context#>, <#CGFloat red#>, <#CGFloat green#>, <#CGFloat blue#>, <#CGFloat alpha#>)
// CGContextSetRGBStrokeColor(<#CGContextRef context#>, <#CGFloat red#>, <#CGFloat green#>, <#CGFloat blue#>, <#CGFloat alpha#>)
//使用UIKit中的方法设置颜色
// [[UIColor redColor] setStroke];
// [[UIColor greenColor] setFill];
//同时设置线条的颜色和填充色,默认是黑色
// [[UIColor redColor] set];
//5.绘制路径
CGContextDrawPath(context, kCGPathFill);
}
#pragma mark - 绘制线条1
- (void)drawLine1:(CGContextRef)context {
//2.创建绘图的路径
CGMutablePathRef path = CGPathCreateMutable();
//画线:设置起点
CGPathMoveToPoint(path, NULL, 50, 50);
//设置目标点
CGPathAddLineToPoint(path, NULL, 200, 200);
//设置目标点
CGPathAddLineToPoint(path, NULL, 50, 200);
//设置目标点
// CGPathAddLineToPoint(path, NULL, 50, 50);
//设置关闭路径
CGPathCloseSubpath(path);
//3.将路径添加到绘制对象(上下文)上
CGContextAddPath(context, path);
//4.设置绘制的属性
//设置线条的颜色
CGContextSetRGBStrokeColor(context, 23/255.0, 183/255.0, 248/255.0, 1);
//设置线条的填充色
CGContextSetRGBFillColor(context, 29/255.0, 29/255.0, 29/255.0, 1);
//设置线条的宽度
CGContextSetLineWidth(context, 2);
//5.绘制
/*
kCGPathStroke:只显示线条的颜色
kCGPathFill:只显示填充色
kCGPathFillStroke:线条的颜色和填充色都显示
*/
CGContextDrawPath(context, kCGPathFillStroke);
//(6.释放路径)
CGPathRelease(path);
}
@end