quartz c语言,IOS学习之—— Quartz 2D (C语言的框架)
//************************************************************************************************************ -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(, , , , , , , )
//添加 "线" 路径
//CGPathAddLines(, , , )
// 把路径添加到上下文
CGContextAddPath(ctx, path);
// 渲染
CGContextStrokePath(ctx);
//开发过程中,ARC环境 C语言的资源是不会自动释放
// 什么情况下创建的C语言资源,需要释放 以create,retain,copy创建的数据要释放
//CGPathRelease(path);
// 能用
CFRelease(path);
}
quartz c语言,IOS学习之—— Quartz 2D (C语言的框架)相关推荐
- lua语言入门学习(二)lua语言的特点及注意事项
lua语言入门学习 lua语言的特点及注意事项 文章目录 lua语言入门学习 lua语言的学习地址 一.lua语言特点 1.注释 2.全局变量和局部变量 3.lua数据类型 4.字符串类型 5.多变量 ...
- c语言入门自学免费app,C语言入门学习最新版下载-C语言入门学习app手机版v1.0.2 安卓版-腾飞网...
C语言入门学习app手机版是一款c语言编程自学软件,零基础也可以学习,里面有海量教学视频,针对c语言不同程度的讲解都囊括其中.随时随地学习编程都可以,不用担心自己没有基础.还支持在手机上敲代码编程哦. ...
- c分布 的程序设计语言,#2020学习打卡##C程序设计语言# C语言中的随机数函数解析...
在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器. 有关如何产生随机数的理论有许多,如果要详细地讨论,需要厚 ...
- c语言编程学多久,丰城c语言编程学习,丰城学c语言编程的学校,丰城学c语言编程一般要多久才能学会...
丰城c语言编程学习,丰城学c语言编程的学校,丰城学c语言编程一般要多久才能学会 首页 > 软件 > 丰城c语言编程学习 作者:镀金池 发布时间:2018-04-09 16:40 在之后 ...
- C语言再学习 -- 再论数组和指针
之前有总结指针数组,但是现在看来总结的太简单了.好多重要的知识点都是一带而过的.本想在后面添加后来想想算了,还是再写一篇文章来详细介绍数组和指针这对冤家吧. 之前总结的,参看:C语言再学习 -- 数组 ...
- 《Go语言圣经》学习笔记 第一章 Go语言入门
Go语言圣经学习笔记 第一章 Go语言入门 目录 Hello, World 命令行参数 查找重复的行 GIF动画 获取URL 并发获取多个URL Web服务 本章要点 注:学习<Go语言圣经&g ...
- 梦想的脚步---C语言的学习与成长
为什么80%的码农都做不了架构师?>>> 梦想的脚步 -----C语言的学习与成长 写在前面:记得工作第一年的时候,茫然若失,不知道该学习什么.那时候疯狂的制定学习计划,什么都 ...
- c语言入门自学手机版,C语言入门学习软件下载-C语言入门学习手机版v1.0.2 - 起点软件园...
C语言入门学习是一款最新推出上线于安卓手机平台的专业编程学习软件,C语言入门学习app收录了海量入门视频课程,清晰易懂的详细讲解专为刚入门学习C语言的小白量身打造,不同章节都有相应的习题,根据习题成绩 ...
- 道痴前辈的C语言编程学习手札1
道痴前辈的C语言编程学习手札1 初学C语言已经有好几个月了,我对学习过程中遇到的一些问题进行了简单的总结,多有不足,希望各位能多多包涵 与此同时,这也是我第一次写博客,也希望各位能多多指教 素材1: ...
最新文章
- Winserver2012R2 部署密钥恢复代理
- Xamarin iOS开发实战1.1.3Xamarin版本
- Arrays.sort()排序
- php检查 session是否存在,检查sessionid已知的PHP会话是否处于活动状态
- Python二级笔记(9)
- SQLSERVER查询存储过程内容
- libevent evbuffer缓冲源码分析
- 今日恐慌与贪婪指数为65 等级转为贪婪
- 波特率、信息传输速率与带宽的关系
- kepware odata 接口访问地址
- ABAP 正则表达式(Regular Expressions)
- 卸载密码保护的瑞星网络版
- /usr/bin/ld: /tmp/ccIHWHTn.o: in function `Cdisk::Cdisk()‘:编译报错解决方案
- Webstorm 分屏操作
- 服务器1U和2U参数详解
- Go:包管理工具GOPATH、vendor、dep 、go module
- 文化中国 系列一:明朝的那些人儿
- WNM2020-3/TR MOS场效应晶体管
- Linux搭建lnmp、nginx、mysql
- web.Config配置文件的详细解释