您的位置:首页 > 其它

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();

// 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);


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: