第一种:画线
static void drawLine(void){
//获取上下文
CGContextRef ctx=UIGraphicsGetCurrentContext();
//创建一个路径
CGMutablePathRef path=CGPathCreateMutable();
//把画笔移动到某个点(某个起始点)
CGPathMoveToPoint(path, NULL, 20, 20);
//添加一个直线到path
// CGPathAddLineToPoint(path, NULL, 100, 10);
// CGPathAddLineToPoint(path, NULL, 100, 50);
// CGPathAddLineToPoint(path, NULL, 10, 50);
CGPathAddLineToPoint(path, NULL, 200, 20);
//形成一个闭环
// CGPathCloseSubpath(path);
//添加到context中
CGContextAddPath(ctx, path);
CGPathRelease(path);
//设置画笔颜色
[[UIColor purpleColor]setStroke];
//设置画笔粗细
CGContextSetLineWidth(ctx,1);
//设置填充颜色
[[UIColor yellowColor]setFill];
//设置路径中线段之间的连接样式
/*
kCGLineJoinMiter, 斜角,一起尖角
kCGLineJoinRound, 圆角
kCGLineJoinBevel 斜角,各自斜角
*/
CGContextSetLineJoin(ctx, kCGLineJoinBevel);
//设置线帽样式
/*
kCGLineCapButt,
kCGLineCapRound,
kCGLineCapSquare
*/
CGContextSetLineCap(ctx, kCGLineCapRound);
//设置虚线
CGFloat lengths[]={5,10,15};
//绘制虚线的四个参数:
/*
1,上下文
2,phase相位
3,数组
4,数组长度
绘制法则:首先绘制5-2个点,跳过10个点,再绘制5个点,跳过10个点..
如果lengths是{5,10,12}:首先绘制5-2个点,跳过10个点,再绘制12个点,跳过5个点,再绘制10个点,跳过12个点。。。
*/
CGContextSetLineDash(ctx, 0, lengths, 3);
// //描线
// CGContextStrokePath(ctx);
// //只绘制填充颜色
// CGContextFillPath(ctx);
//绘制路线
/*
kCGPathFill, 表示用非零绕数规则
kCGPathEOFill, 表示用奇偶规则
kCGPathStroke, 表示描线,不填充;
kCGPathFillStroke, 表示填充和描线;
kCGPathEOFillStroke 描线填充
*/
//绘制填充和描线
CGContextDrawPath(ctx, kCGPathFillStroke);
}
画图形:
-(void)drawRect{
//获取上下文
CGContextRef context=UIGraphicsGetCurrentContext();
//设置颜色填充
[[UIColor redColor]setFill];
//设置画笔颜色
[[UIColor greenColor]setStroke];
//设置线宽
CGContextSetLineWidth(context, 2);
//填充矩形:
CGContextFillRect(context, CGRectMake(50, 50, 100, 100));
// UIRectFill(CGRectMake(50, 50, 100, 100));
//绘制矩形
CGContextStrokeRect(context, CGRectMake(50, 50, 100, 100));
//第二种绘制矩形方式。
//添加一个矩形到context,这个方法不会直接绘制矩形,需要调用绘制方法
CGContextAddRect(context, CGRectMake(150, 100, 40, 40));
CGContextStrokePath(context);
}
-(void)drawArc{
//获取上下文
CGContextRef context=UIGraphicsGetCurrentContext();
//设置画笔颜色
[[UIColor purpleColor]setStroke];
//设置线宽
CGContextSetLineWidth(context, 100);
//设置线帽
CGContextSetLineCap(context, kCGLineCapButt);
/*
参数说明:
1,上下文
2 3,x,y表示弧的中心点
4,半径
5,起始位置弧度
6,结束位置弧度
7,是否顺时针方向0表示顺时针,1表示逆时针
*/
static int k;
CGContextAddArc(context, 200, 200, 50, -M_PI_2, -M_PI_2+k, 0);
CGContextStrokePath(context);
k++;
}
-(void)drawText{
NSString * text=@"看这里哦";
//设置颜色
[[UIColor purpleColor]setStroke];
UIFont * font=[UIFont fontWithName:@"Marker Felt" size:16];
[text drawAtPoint:CGPointMake(100, 100) withAttributes:@{NSFontAttributeName:font,NSForegroundColorAttributeName:[UIColor redColor]}];
CGRect rect = CGRectMake(50, 200, 200, 40);
[[UIColor blueColor]set];
UIRectFill(rect);
[[UIColor redColor]set];
// 只能用居中、左、右对齐
NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
paragraph.alignment = NSTextAlignmentCenter;
[text drawInRect:rect withAttributes:@{NSFontAttributeName:font,NSForegroundColorAttributeName:[UIColor redColor],NSParagraphStyleAttributeName:paragraph}];
//关于文字font更多Attributes http://blog.sina.com.cn/s/blog_8d1bc23f0101etmr.html
}
设置图形:
-(void)drawImage{
//画圆,以便以后指定可以显示图片的范围
//获取图形上下文
CGContextRef ctx=UIGraphicsGetCurrentContext();
CGContextAddEllipseInRect(ctx, CGRectMake(100, 100, 50, 50));
//指定上下文中可以显示内容的范围就是圆的范围
CGContextClip(ctx);
UIImage * image=[UIImage imageNamed:@"xxx.jpg"];
//从某个点开始,原图大小绘制
[image drawAtPoint:CGPointMake(10, 10)];
// //在某个rect中绘制,会拉伸,收缩
// [image drawInRect:CGRectMake(0, 0, 80, 80)];
// //在某个rect中平铺
// [image drawAsPatternInRect:CGRectMake(0, 100, 80, 80)];
}
#import "MYView.h"
@implementation MYView
static void drawLine(){
//获取上下文
CGContextRef context=UIGraphicsGetCurrentContext();
//画一条线
CGMutablePathRef path=CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 50, 50);
CGPathAddLineToPoint(path, NULL, 100, 100);
CGPathAddLineToPoint(path, NULL, 50, 100);
// CGPathAddLineToPoint(path, NULL, 100, 200);
// CGPathCloseSubpath(path);
CGContextAddPath(context, path);
CGPathRelease(path);
//指定下画笔的颜色
CGContextSetRGBStrokeColor(context, 1, 0, 0, 1);
// [[UIColor blueColor]setStroke];
//指定封闭区间的填充色
CGContextSetRGBFillColor(context, 0, 1, 0, 1);
//设置线条的粗细
CGContextSetLineWidth(context, 1);
//设置线段链接的样式
/*
kCGLineJoinMiter, 斜角,一起尖角
kCGLineJoinRound, 圆角
kCGLineJoinBevel 斜角,各自斜角
*/
CGContextSetLineJoin(context, kCGLineJoinRound);
//设置线帽样式
/*
kCGLineCapButt,
kCGLineCapRound,
kCGLineCapSquare
*/
CGContextSetLineCap(context, kCGLineCapRound);
//这个方法只能描线
// CGContextStrokePath(context);
//这个方法只能填充颜色
// CGContextFillPath(context);
/*
kCGPathFill, 表示用非零绕数规则
kCGPathEOFill, 表示用奇偶规则
kCGPathStroke, 表示描线,不填充;
kCGPathFillStroke, 表示填充和描线;
kCGPathEOFillStroke 描线填充
*/
CGFloat num[]={5,10,15};
CGContextSetLineDash(context,2,num,3);
CGContextDrawPath(context, kCGPathFillStroke);
}
static void drawMyRect(){
CGContextRef context=UIGraphicsGetCurrentContext();
[[UIColor redColor]setStroke];
[[UIColor cyanColor]setFill];
CGContextSetLineWidth(context, 3);
// //只绘制矩形填充色
// UIRectFill(CGRectMake(40, 40, 200, 100));
//只绘制矩形边框,无填充
// CGContextStrokeRect(context, CGRectMake(40, 40, 200, 100));
//同时绘制填充和描线
CGContextAddRect(context,CGRectMake(40, 40, 200, 100));
CGContextDrawPath(context, kCGPathFillStroke);
}
static int k;
static void drawArc(){
CGContextRef context=UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 40);
[[UIColor redColor]setStroke];
CGContextSetLineCap(context, kCGLineCapButt);
CGContextAddArc(context, 100, 100, 50, -M_PI_2, -M_PI_2+(k++), 0);
CGContextStrokePath(context);
}
static void drawText(){
NSString * str=@"明明也不困";
[[UIColor purpleColor]setStroke];
//设置文字属性
UIFont * font=[UIFont fontWithName:@"Marker Felt" size:20];
[str drawAtPoint:CGPointMake(10, 10) withAttributes:@{NSFontAttributeName:font,NSForegroundColorAttributeName:[UIColor blueColor]}];
CGRect rect=CGRectMake(10, 60, 200, 30);
[[UIColor cyanColor]setFill];
UIRectFill(rect);
// 只能用居中、左、右对齐
NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
paragraph.alignment = NSTextAlignmentCenter;
[str drawInRect:rect withAttributes:@{NSFontAttributeName:font,NSForegroundColorAttributeName:[UIColor blueColor],NSParagraphStyleAttributeName:paragraph}];
}
static void drawImage(){
CGContextRef context=UIGraphicsGetCurrentContext();
CGContextMoveToPoint(context, 30, 30);
CGContextAddLineToPoint(context, 150, 30);
CGContextAddLineToPoint(context, 100, 150);
CGContextClosePath(context);
CGContextClip(context);
UIImage * image=[UIImage imageNamed:@"a.jpg"];
[image drawAtPoint:CGPointMake(20, 20)];
[image drawInRect:CGRectMake(5, 5, 100, 150)];
[image drawAsPatternInRect:CGRectMake(5, 200, 100, 150)];
}
static void drawMore(){
CGContextRef context=UIGraphicsGetCurrentContext();
[[UIColor greenColor]setStroke];
//备份上下文
CGContextSaveGState(context);
CGContextTranslateCTM(context , 50, 50);
CGContextStrokeRect(context, CGRectMake(0, 0, 200, 100));
CGContextRestoreGState(context);
CGContextSaveGState(context);
CGContextRotateCTM(context, M_PI_4);
[[UIColor redColor]setStroke];
CGContextStrokeRect(context,CGRectMake(0, 0, 200, 100));
CGContextRestoreGState(context);
CGContextSaveGState(context);
[[UIColor blueColor]setStroke];
CGContextSetLineWidth(context, 10);
CGContextScaleCTM(context, 0.5, 0.5);
CGContextStrokeRect(context,CGRectMake(0, 0, 200, 100));
}
- (void)drawRect:(CGRect)rect {
NSLog(@"drawRect!");
// drawLine();
// drawMyRect();
// drawArc();
// drawText();
// drawImage();
drawMore();
}