Quartz 2D的简单使用
来源:互联网 发布:java iterator用法 编辑:程序博客网 时间:2024/05/29 13:13
<strong><span style="font-size:24px;">Quartz 2D的简单使用</span></strong>
使用Quartz 2D这个框架可以在uiview画出我们自己想画的图形,而不用使用系统提供的控件。但是在要实现这个效果要重写uiview的-(void)drawRect:(CGRect)rect方法;
1.绘制简单的线段
-(void)drawRect:(CGRect)rect{ //获取图形上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); //设置线条的宽度 CGContextSetLineWidth(ctx, 10); //设置线条的头尾部的样式 CGContextSetLineCap(ctx, kCGLineCapRound); //设置两线段之间转折点的样式 CGContextSetLineJoin(ctx,kCGLineJoinRound); //画一条直线(两点一线),确定起点 CGContextMoveToPoint(ctx, 100, 100); //添加一条线段到(100,200) CGContextAddLineToPoint(ctx, 100, 200); //以第一条线段的终点为起点,添加一个线段到(150,253) CGContextAddLineToPoint(ctx, 150, 253); //设置颜色(第一种通过rgb方式设置) CGContextSetRGBStrokeColor(ctx, 0, 0, 1, 1); //设置颜色(第二种 通过oc的方式设置,setStroe设置空心图形的颜色 setFill设置实心图形的 //的颜色,set :即可设置空心颜色,也可设置实心颜色// [[UIColor greenColor]setStroke];// [[UIColor greenColor]setFill] [[UIColor blackColor]set]; //渲染ctx,stroke为空心。所有的线段都为空心渲染 CGContextStrokePath(ctx);}
2.绘制三角形
-(void)drawRect:(CGRect)rect{ //获取图形上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextSetLineWidth(ctx, 10); //---------------直接在3点之间添加3条线段,形成3角形----------- //设置一个起点 CGContextMoveToPoint(ctx, 10, 10); //从(10,10)添加一条线段到(10,100) CGContextAddLineToPoint(ctx, 10, 100); //从(10,100)添加一条线段到(100,150) CGContextAddLineToPoint(ctx, 100, 150); //从(100,150)添加一个线段到(10,10) CGContextAddLineToPoint(ctx, 10,10); [[UIColor blackColor]setFill]; CGContextFillPath(ctx); //------------第二种:最后一条线段,调用封闭路径的方法(使终点和起点自动相连形成一条线段)---- CGContextMoveToPoint(ctx, 200, 200); CGContextAddLineToPoint(ctx, 200, 250); CGContextAddLineToPoint(ctx, 250, 300); //关闭路径(连接起点和终点) CGContextClosePath(ctx); [[UIColor whiteColor] set];// CGContextStrokePath(ctx); //渲染实心图形 CGContextFillPath(ctx);}
3.绘制圆
/** * 画一个1/4圆 */- (void)drawRect:(CGRect)rect{ //获取图形上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); //设置一个起点(和圆心一致) CGContextMoveToPoint(ctx, 100, 100); //添加一个线段到(100,150) CGContextAddLineToPoint(ctx, 100, 150); //添加一个圆弧 CGContextAddArc(ctx, 100, 100, 50,M_PI_2,0,1); //关闭路径(连接起点和终点) CGContextClosePath(ctx); //设置颜色 [[UIColor blueColor]set]; //渲染空心图形 CGContextStrokePath(ctx);}/** * 画一个完整的圆 */void drawCircle(){ //获取图形上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); //画圆,设置圆所在的矩形框(当长宽一样时显示出来的就是一个圆,当长宽不一样时显示出来的就是一个椭圆) CGContextAddEllipseInRect(ctx, CGRectMake(50, 50, 100, 150)); //设置线段的宽度,可以通过这种方式画出一个圆环 CGContextSetLineWidth(ctx, 10); //渲染一个空心圆 CGContextStrokePath(ctx);}void drawArc(){ //获取图形上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); //画圆弧 //x/y:圆心坐标点 //startAngle:开始角度(以数学中的x,y坐标系,x的正方向为0度,x的负方向为180度,或者-180度,y的正方向为-90度,y的负方向为90度) //endAngle:结束角度 //clockWise:圆弧的伸展方向(0:顺时针 1:逆时针) CGContextAddArc(ctx, 100, 100, 50, -M_PI_2, M_PI, 1); //渲染图形 CGContextFillPath(ctx);}
4.绘制二次曲线
画曲线,通过画贝塞尔曲线实现的。需要设置3个点,当前点,结束点和中间控制点
/** * 画曲线 */void drawZui(CGContextRef ctx, CGRect rect){ // 中间的控制点 CGFloat controlX = rect.size.width * 0.5; CGFloat controlY = rect.size.height * 0.4; // 当前点 CGFloat marginX = 20; CGFloat marginY = 10; CGFloat currentX = controlX - marginX; CGFloat currentY = controlY - marginY; CGContextMoveToPoint(ctx, currentX, currentY); // 结束点 CGFloat endX = controlX + marginX; CGFloat endY = currentY; // 贝塞尔曲线 CGContextAddQuadCurveToPoint(ctx, controlX, controlY, endX, endY); // 设置颜色 [[UIColor blackColor] set]; // 渲染 CGContextStrokePath(ctx);}
0 0
- Quartz 2D的简单使用
- Quartz 2D 简单使用
- 关于Quartz 2D绘图的简单使用
- Quartz 2D简单的绘图
- Quartz 2D的路径的使用
- Quartz 2D简单复习
- iOS上使用Quartz 2D绘制简单图形
- iOS上使用Quartz 2D绘制简单图形
- iOS海哥开发笔记 (海哥原创,Quartz-2d的简单使用 一)
- Quartz的简单使用
- Quartz的简单使用
- iOS海哥开发笔记 (海哥原创,绘图Quartz-2d的简单使用 二)
- Quartz 2D 常用简单功能汇总
- Quartz 2D 常用简单功能汇总
- iOS Quartz-2d画图 - 简单
- Quartz(一) 简单的使用
- Quartz 2D 使用路径(2)
- iOS 使用Quartz 2D画虚线
- 英语学习 3 python
- hdu 1824 2-sat问题(判断)
- CGLib动态代理原理及实现
- nyoj106背包问题(贪心)
- C语言的那些秘密之---函数返回局部变量
- Quartz 2D的简单使用
- Linux下php+mysql+nginx编译搭建(一)
- 2014青岛理工大学ACM邀请赛总结
- Servet Filter Listener 详解
- 2014-11-8Android学习-------AnimationListener方法-------动画Animation学习篇
- Linux stat函数讲解:
- POJ 2420 A Star not a Tree? (模拟退火)
- 《unix高级环境编程》信号——sigsuspend 函数
- 爱的送大炮打破爱动啊堤坡阿斯顿破安排都I啊