IOS学习之—— Quartz 2D (C语言的框架)
来源:互联网 发布:强力手机数据恢复软件 编辑:程序博客网 时间:2024/06/16 17:55
//************************************************************************************************************ -12 Quartz 2D (C语言的框架) // 主要是用来自定义view 1.简介 (1)Quartz 2D 是一个二维绘图引擎,同时支持ios和 Mac系统 (2)//绘制图形, 线条,三角形,矩形 圆 狐 // 绘制文字, // 绘制 生成图片 // 读取 生成PDF //截图 裁剪图片 (3)有些UI界面及其复杂,而且比较有个性化,用普通的UI控件无法实现,这时候可以利用Quartz 2D技术将控件内部的结构画出来,自定义控件的样子 其实,ios中大部分的控件的内容都是通过它画出来的 (4)因此,它中IOS中 很重要的一个价值是:自定义view (自定义UI控件)// 如何利用Quartz2D自定义view?//3.如何利用Quartz 2D 绘制东西到view 上? (1) 首先,得有图形上下文,因为它能保存绘图信息,并且决定着绘图到什么地方去。 (2) 其次,那个图形上下文必须跟view 相关联,才能将内容绘制到view 上//4. 自定义view的步骤: (1)新建一个类,继承自UIView (2)实现 -(void)drawRect:(CGRect)rect 方法 ,(解开.m 文件中的注释就可以了) (3)取得当前view 相关联的图形上下文 (4)绘制相应的图形内容 (5)利用图形上下文将绘制的所有内容渲染显示到view 上面// 画线的步骤: (1) 创建一个类LineView 继承UIView 解开.m文件的注释 就可以用其中的内容了 (2) 创建一个UIView 在Stroyboard 中 让它关联 LineView (3)- (void)drawRect:(CGRect)rect {// 调用方法 [self drawRectangle];//矩形// [self drawTriangle]//三角形 要用哪个调用就好 }#pragma mark 画矩形 -(void) drawRectangle{ //获取上下文 上下文的输出目录就是self[view] CGContextRef context = UIGraphicsGetCurrentContext(); //设置线的颜色 CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1); //设置线宽 CGContextSetLineWidth(context, 10); //设置线头尾的样式 CGContextSetLineCap(context, kCGLineCapRound); //设置连接点的样式 CGContextSetLineJoin(context, kCGLineJoinBevel); //画一条线 需要两个点 一个起点 一个终点 //**********************************************方法一 矩形 // // 设置一个起点 // CGContextMoveToPoint(context, 10, 10); // //设置一个终点 // CGContextAddLineToPoint(context, 110, 10); // CGContextAddLineToPoint(context, 110, 110); // CGContextAddLineToPoint(context, 10, 110); // CGContextAddLineToPoint(context, 10, 10); //**********************************************方法二 矩形 CGContextAddRect(context, CGRectMake(10, 10, 100, 100)); //画到view[渲染] // 只是画了一条线 空心 CGContextStrokePath(context); //填充 实心 //CGContextFillPath(context); }#pragma mark 画三角形 画线也可以使用这个方法 // 方法一// // 设置一个起点// CGContextMoveToPoint(context, 10, 10);// //设置一个终点// CGContextAddLineToPoint(context, 110, 10);// CGContextAddLineToPoint(context, 110, 110); 方法二 CGPoint points[3]={{10,10},{110,10},{110,110}}; CGContextAddLines(ctx,points,3); //关闭路径 CGContextClosePath(context);#pragma mark 画圆 //画圆 CGContextAddEllipseInRect(context,CGRectMake(10 ,10, 100, 100));#pragma mark 画弧 // x y 圆心 radious 半径 startAngle 画弧的起始位置 endAngel结束的位置 clockwise 0顺时针 1 逆时针 CGContextAddArc(context,100,100,60,M_PI_2,0);#pragma mark 画扇形 //起点 CGContextMoveToPoint(context,100,100); CGContextAddArc(context,100,1000,60,- M_PI_4, -3*M_PI_4,1); // x y 圆心 radious 半径 startAngle 画弧的起始位置 endAngel结束的位置 clockwise 0顺时针 1 逆时针 //关闭路径 CGContextClosePath(context);#pragma mark 画文字 - (void)drawRect:(CGRect)rect { // Drawing code CGFloat w = rect.size.width; CGFloat h = rect.size.height; //画图片 UIImage *image =[UIImage imageNamed:@"papa"]; //设置位置 [image drawInRect:CGRectMake(10, 10, 100, 100)]; //设置平铺 [image drawAsPatternInRect:CGRectMake(0, 0, 180, 180)]; //画文字 NSString *text =@"skdfkljahsjfdlasdfhkasjdhflasjkhfdlkashdfjkh"; //设置字体的样式 NSDictionary *attr =@{NSFontAttributeName:[UIFont systemFontOfSize:13],NSForegroundColorAttributeName:[UIColor yellowColor]}; //指定宽度和高度 和字体样式 [text drawInRect:CGRectMake(0, 0, w, h*0.5) withAttributes:attr];// withAttributes 设置字体的样式 }#pragma mark 饼状图 //核心 第五天 步骤: (1)自定义一个饼状view(PieView) 添加到控制器view 上 (2) 添加PieView的一个类型为数据的section属性 存储所有分类的个数,并且添加一个颜色数组,用于存储颜色 (3)中drawRect 方法中遍历section 的大小 (4)遍历section的个数,进行总数汇总 (5)定义一个“扇形的起始位置” (6)设置路径中心点 (7)遍历section 计算数组中每一个元素占用总数的比例 (8)根据比例计算饼状的结束位置 病设置“弧”的路径 (9)渲染扇形中UIView 上,实现实心的扇形 (10)给“扇形的起始位置”重新赋值,进入下一个循环#pragma mark 矩阵操作 ( 平移 缩放 旋转 ) 目标:掌握中图层上下文的平移 缩放 旋转 #warining qurtz2d 的平移 要在绘制之前。 //平移 CGContextTranslateCTM(ctx,0,-80);//x y轴 //缩放 CGContextScaleCTM(ctx,1.5,1.0);//x y缩放的倍数 //旋转 CGContextRotateCTM(ctx,-M_PI*0.1);// 负数 逆时针, 正数 顺时针 围绕左上角(0,0)进行旋转的#pragma mark 使用UIKit 绘图方法 //UIKit 方法,虽然不用获取上下文,但是内部最终都会获取上下文进行绘制。// 画实心 UIRectFill(CGRectMake(10,10,100,100));// 画空心 UIRectFrame(CGRectMake(10,10,100,100));#pragma mark Path 的使用 (1)画出的东西 ,都是沿着一条路径去画的。 (2)path 是将路径定义好后,再放入上下文。 使用步骤:1.创建路径 CGMutablePathRef path =CGPathCreateMutable(); 2.通过CGPathAddLineToPoint,CGPointAddArc,CGPathAddEllipseInRect 定义路径 3.将路径添加到上下文中CGContextAddPath; - (void)drawRect:(CGRect)rect { // Drawing code CGContextRef ctx = UIGraphicsGetCurrentContext(); //每调用一次,往上下文添加路径 // CGContextMoveToPoint(ctx, 10, 10); // CGContextAddLineToPoint(ctx, 100, 100); //先把所有的路径定义好,然后一次性往上下文中添加 CGMutablePathRef path = CGPathCreateMutable(); // 设置圆的路径 CGPathAddEllipseInRect(path, NULL, CGRectMake(10, 10, 100, 100)); CGPathAddEllipseInRect(path, NULL, CGRectMake(20, 20, 80, 80)); //添加弧的路径 //CGPathAddArc(<#CGMutablePathRef path#>, <#const CGAffineTransform *m#>, <#CGFloat x#>, <#CGFloat y#>, <#CGFloat radius#>, <#CGFloat startAngle#>, <#CGFloat endAngle#>, <#bool clockwise#>) //添加 "线" 路径 //CGPathAddLines(<#CGMutablePathRef path#>, <#const CGAffineTransform *m#>, <#const CGPoint *points#>, <#size_t count#>) // 把路径添加到上下文 CGContextAddPath(ctx, path); // 渲染 CGContextStrokePath(ctx); //开发过程中,ARC环境 C语言的资源是不会自动释放 // 什么情况下创建的C语言资源,需要释放 以create,retain,copy创建的数据要释放 //CGPathRelease(path); // 能用 CFRelease(path); }
0 0
- IOS学习之—— Quartz 2D (C语言的框架)
- IOS学习笔记 运用Quartz 2D框架绘制常见的图形(2)
- IOS开发—Quartz 2D介绍
- iOS开发—Quartz 2D介绍
- C语言学习之%*d的应用
- iOS Quartz 2D 学习总结
- 9、iOS开发之 Quartz-2d
- iOS 图像开发之Quartz 2D
- IOS学习笔记 运用Quartz 2D框架绘图理论基础(1)
- IOS Quartz 2D
- iOS-Quartz 2D
- IOS Quartz 2D
- ios-Quartz 2D
- ios-day14-03(Quartz 2D之矩阵操作——旋转、平移、缩放)
- 【IOS 开发学习总结-OC-64】Quartz 2D绘图(4-1)——Quartz 2D绘图基础+点线模式
- iOS绘图——Quartz 2D使用方法
- Quartz - 2D学习
- Quartz 2D 学习
- IOS学习之—— UITabBarController
- abstract解析
- 关于使用PorterDuff.Mode.CLEAR实现丧心病狂的高亮效果
- 关于大型网站技术演进的思考(二十)--网站静态化处理—web前端优化—中(12)
- POJ2677,HDU2224【双调欧几里得模板题】
- IOS学习之—— Quartz 2D (C语言的框架)
- TweenAnimations补间动画详解
- Bash64与图片
- java基本数据类型
- HDU 1325 Is it a tree ?
- solr入门之拼音加汉字方式的搜索建议自动补全的不高效实现
- LeetCode之300—-Longest Increasing Subsequence
- [C++] const int *a, int const *a,int * const a,区别,指针数组
- http协议通信过程和请求格式