Quartz2d 画图
2016-05-17 20:54
369 查看
第一种:画线
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();
}
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();
}
相关文章推荐
- 父窗口打开子窗口,子窗口关闭后自动刷新父窗口
- 设计模式之原型模式
- 并发编程学习总结(四) :java 显式锁ReentrantLock使用详解之lock()\unlock() 加锁与释放锁
- Dhroid框架六大组件之Ioc容器【上】
- android静音播放视频
- Android Handler(子线程Handler)异步消息处理机制的妙用(活用信号量) 创建强大的图片加载类
- POJ 3347 Kadj Squares(计算几何)
- unity游戏优化
- ISAPI_Rewrite 3 伪静态软件
- ipvsadm参数详解(常用命令)
- sql 获取当前日期的季度,年份,月份等日期部分
- 三栏自适应布局实现(左右固定宽度,中间自适应)
- FlashCache初体验
- ios 禁止输入表情
- 懒人学习automake, Makefile.am,configure.ac
- Dijkstra-java
- Jsp小案例——输出当前系统时间
- java之求两个输入数的最大公因数和最小公倍数
- 前端模块化
- ASP.NET Repeater中if块中判断Eval("")