Quartz2D-绘线
2015-12-28 12:23
309 查看
1> Quartz2D简介
* PPT简介
什么是Quartz2D?二维的绘图引擎
什么是二维?平面
什么是引擎?经包装的函数库,方便开发者使用。也就是说苹果帮我们封装了一套绘图的函数库
同时支持iOS和Mac系统什么意思?用Quartz2D写的同一份代码,既可以运行在iphone上又可以运行在mac上,可以跨平台开发。
开发中比较常用的是截屏/裁剪/自定义UI控件。
Quartz2D在iOS开发中的价值就是自定义UI控件。
图形上下文的数据类型和作用。
有多少种上下文。
自定义控件的步骤。
为什么要实现drawRect:方法,因为只有在drawRect:方法中才能获取到上下文
2> Quartz2D绘图演练
drawRect:方法自动生成,意味着什么?这个方法很重要。
1> 什么时候调用:视图要显示的时候,才会调用,viewDidLoad后才会调用,因为那时候还没显示视图。
2> 作用:用来绘图
* 画一条线
1> 获取图形上下文
CG:表示这个类在CoreGraphics框架里 Ref:引用
//目前学的上下文都跟UIGraphics有关,想获取图形上下文,首先敲UIGraphics。
2> 拼接路径:一般开发中用贝塞尔路径,里面封装了很多东西,可以帮我画一些基本的线段,矩形,圆等等。
创建贝塞尔路径
起点:moveToPoint
终点:addLineToPoint
3> 把路径添加到上下文
CGPath转换:UIKit框架转CoreGraphics直接CGPath就能转
4> 把上下文渲染到视图,图形上下文本身不具备显示功能。
PPT画图分析为什么要这样做?首先获取图形上下文,然后描述路径,把路径添加到上下文,渲染到视图,图形上下文相当于一个内存缓存区,在内存里面操作是最快的,比直接在界面操作快多了。
* 在添加一根线
直接addLineToPoint,因为路径是拼接的,默认下一条线的起点是上一条线的终点。
* 画两跟不连接的线
1> 第二次画的时候,重新设置起点,然后画线。一个路径可以包含多条线段。
2> 新创建一个路径,添加到上下文。开发中建议使用这种,比较容易控制每根线。
* 设置绘图状态
线段怎么加粗。
绘图状态调用顺序:只要在渲染之前就好了,在渲染的时候才会去看绘图的最终状态。
* 画曲线
3个点,起点,终点,控制点。
(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
/**
什么调用:当你视图第一次显示的时候就会调用
作用:绘图
@param rect = self.bounds
*/
1.绘首尾相连的折线
(void)drawLine{
// 1.获取上下文
// CGContextRef CG CoreGraphics Ref 引用
// 目前学的上下文都跟UIGraphics有关,以后想直接获取上下文,直接敲一个UIGraphics
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 2.设置绘图信息(拼接路径)
UIBezierPath *path = [UIBezierPath bezierPath];
// 设置起点
[path moveToPoint:CGPointMake(10, 10)];
// 添加一条线到某个点
[path addLineToPoint:CGPointMake(125, 125)];
[path addLineToPoint:CGPointMake(240, 10)];
// 3.把路径添加到上下文
// 直接把UIKit的路径转换成CoreGraphics,CG开头就能转
CGContextAddPath(ctx, path.CGPath);
// 4.把上下文渲染到视图
// Stroke描边
CGContextStrokePath(ctx);
}
2.//绘首尾不相连的折线
- (void)draw2Line{
// 1.获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
}
3.绘制曲线
- (void)drawRect:(CGRect)rect{
// 1.获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
}
* PPT简介
什么是Quartz2D?二维的绘图引擎
什么是二维?平面
什么是引擎?经包装的函数库,方便开发者使用。也就是说苹果帮我们封装了一套绘图的函数库
同时支持iOS和Mac系统什么意思?用Quartz2D写的同一份代码,既可以运行在iphone上又可以运行在mac上,可以跨平台开发。
开发中比较常用的是截屏/裁剪/自定义UI控件。
Quartz2D在iOS开发中的价值就是自定义UI控件。
图形上下文的数据类型和作用。
有多少种上下文。
自定义控件的步骤。
为什么要实现drawRect:方法,因为只有在drawRect:方法中才能获取到上下文
2> Quartz2D绘图演练
drawRect:方法自动生成,意味着什么?这个方法很重要。
1> 什么时候调用:视图要显示的时候,才会调用,viewDidLoad后才会调用,因为那时候还没显示视图。
2> 作用:用来绘图
* 画一条线
1> 获取图形上下文
CG:表示这个类在CoreGraphics框架里 Ref:引用
//目前学的上下文都跟UIGraphics有关,想获取图形上下文,首先敲UIGraphics。
2> 拼接路径:一般开发中用贝塞尔路径,里面封装了很多东西,可以帮我画一些基本的线段,矩形,圆等等。
创建贝塞尔路径
起点:moveToPoint
终点:addLineToPoint
3> 把路径添加到上下文
CGPath转换:UIKit框架转CoreGraphics直接CGPath就能转
4> 把上下文渲染到视图,图形上下文本身不具备显示功能。
PPT画图分析为什么要这样做?首先获取图形上下文,然后描述路径,把路径添加到上下文,渲染到视图,图形上下文相当于一个内存缓存区,在内存里面操作是最快的,比直接在界面操作快多了。
* 在添加一根线
直接addLineToPoint,因为路径是拼接的,默认下一条线的起点是上一条线的终点。
* 画两跟不连接的线
1> 第二次画的时候,重新设置起点,然后画线。一个路径可以包含多条线段。
2> 新创建一个路径,添加到上下文。开发中建议使用这种,比较容易控制每根线。
* 设置绘图状态
线段怎么加粗。
绘图状态调用顺序:只要在渲染之前就好了,在渲染的时候才会去看绘图的最终状态。
* 画曲线
3个点,起点,终点,控制点。
(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
/**
什么调用:当你视图第一次显示的时候就会调用
作用:绘图
@param rect = self.bounds
*/
1.绘首尾相连的折线
(void)drawLine{
// 1.获取上下文
// CGContextRef CG CoreGraphics Ref 引用
// 目前学的上下文都跟UIGraphics有关,以后想直接获取上下文,直接敲一个UIGraphics
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 2.设置绘图信息(拼接路径)
UIBezierPath *path = [UIBezierPath bezierPath];
// 设置起点
[path moveToPoint:CGPointMake(10, 10)];
// 添加一条线到某个点
[path addLineToPoint:CGPointMake(125, 125)];
[path addLineToPoint:CGPointMake(240, 10)];
// 3.把路径添加到上下文
// 直接把UIKit的路径转换成CoreGraphics,CG开头就能转
CGContextAddPath(ctx, path.CGPath);
// 4.把上下文渲染到视图
// Stroke描边
CGContextStrokePath(ctx);
}
2.//绘首尾不相连的折线
- (void)draw2Line{
// 1.获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 2.拼接路径 UIBezierPath *path = [UIBezierPath bezierPath]; // 设置起点 [path moveToPoint:CGPointMake(10, 125)]; // 添加一条线到某个点 [path addLineToPoint:CGPointMake(230, 125)]; // // 设置起点 // [path moveToPoint:CGPointMake(10, 10)]; // // // 添加一条线到某个点 // [path addLineToPoint:CGPointMake(125, 100)]; //最好另设路径,方便管理 UIBezierPath *path1 = [UIBezierPath bezierPath]; [path1 moveToPoint:CGPointMake(10, 10)]; [path1 addLineToPoint:CGPointMake(125, 100)]; // 3.把路径添加到上下文 CGContextAddPath(ctx, path.CGPath); CGContextAddPath(ctx, path1.CGPath); // 设置绘图状态 // 设置线宽 CGContextSetLineWidth(ctx, 10); CGContextSetLineCap(ctx, kCGLineCapRound); // CGContextSetRGBStrokeColor(ctx, 1, 0, 0, 1); [[UIColor redColor] set]; // 4.渲染上下文到视图 CGContextStrokePath(ctx);
}
3.绘制曲线
- (void)drawRect:(CGRect)rect{
// 1.获取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 2.拼接路径 UIBezierPath *path = [UIBezierPath bezierPath]; CGPoint startP = CGPointMake(10, 125); CGPoint endP = CGPointMake(240, 125); CGPoint controlP = CGPointMake(125, 0); [path moveToPoint:startP]; [path addQuadCurveToPoint:endP controlPoint:controlP]; // 3.把路径添加到上下文 CGContextAddPath(ctx, path.CGPath); // 4.渲染上下文到视图 CGContextStrokePath(ctx);
}
相关文章推荐
- Bezier曲线
- context
- YII使用url组件美化管理的方法
- python 遍历文件夹和子目录抓出自己想用的文件类型
- 2015年12月28日课堂笔记与作业
- phpMyAdmin 手动输入数据库服务器IP
- ios-@property属性(特性)
- window.load和document.ready的区别
- 3D touch功能
- 恩布企业 IM 安卓端 1.3,服务端 1.12 公布
- winXP开始菜单中的历史记录怎么清除?
- kubernetes-1.0.3集群安装部署
- eclipse中快速打开Genymotion插件
- Android Jni层调用应用层(Java)的方法
- Android IOS WebRTC 音视频开发总结(五七)-- 网络传输上的一种QoS方案
- java 深入技术八(内省)
- Ubuntu14.04更新源
- Problem B: C语言习题5.14--for循环画三角形
- design 学习
- Netty(五)序列化protobuf在netty中的使用