Quarz 2D是一個二維繪圖引擎,用它能夠:
?繪制圖形:線條棍掐、三角形藏雏、矩形、圓作煌、弧等
?繪制文字
?繪制\生成圖片(圖像)
?讀取\生成PDF
?截取\裁剪圖片
?自定義UI控件
Quarz 2D實(shí)例:
Quarz 2D能做很多強(qiáng)大的事情掘殴,比如
?裁剪圖片\圓形裁剪,
? 涂鴉畫板,
? 以及手勢解鎖粟誓,
? 報表(折線圖奏寨,餅狀圖,柱狀圖)
自定義view
在你的view上畫東西鹰服,首先你要明白“圖形上下文(Graphics Context)”的概念
- 圖形上下文(Graphics Context):你可以想象理解成畫板病瞳,它是一個CGContextRef類型的數(shù)據(jù),屬于CoreGraphics(核心繪圖)框架悲酷。
- 圖形上下文的作用:
?保存繪圖信息套菜、繪圖狀態(tài)
?決定繪制的輸出目標(biāo)(繪制到什么地方)(輸出的目標(biāo)可以是PDF文件,Bitmap或者顯示器的窗口上) - 相同的一套繪圖序列设易,指定不同的Graphics Context逗柴,就可以將相同的圖像繪制到不同的目標(biāo)
? Quarz 2D提供了以下幾種類型的圖形上下文:
?Bitmap Graphics Context
? PDF Graphics Context
?Window Graphics Context
?Layer Graphics Context
?Printer Graphics Context
自定義view
- 如何利用Quarz 2D繪制東西到view上?
?首先得有圖形上下文顿肺,因為它能保存繪圖信息戏溺,并且決定著繪制到什么地方去
?其次渣蜗,哪個圖形上下文必須跟view相關(guān)聯(lián),才嫩將內(nèi)容繪制到view上面 - 自定義View步驟:
?新建一個類旷祸,繼承自UIView
?實(shí)現(xiàn)- (void)drawRect:(CGRect)rect方法耕拷,然后在這個方法中:- 取得跟當(dāng)前view相關(guān)聯(lián)的圖形上下文
- 繪制相應(yīng)的圖形內(nèi)容---描述路徑
- 利用圖形上下文繪制的所有內(nèi)容渲染顯示到view上
新建一個MuView類,繼承自UIView
#import <UIKit/UIKit.h>
@interface MuView : UIView
@end
在故事版中拖拽一個UIView,讓其綁定MuView類型
drawRect
#import "MuView.h"
@implementation MuView
- (void)drawRect:(CGRect)rect{
/*因為只有在drawRect這個方法里面才能獲取到跟view的layer相關(guān)聯(lián)的圖形上下文
*rect是當(dāng)前控件的bounds
*當(dāng)這個view要顯示的時候托享,才會調(diào)用drawRect繪制圖形
*/
[self ..];
}
@end
.
-(void)drawLine{
// 1獲取圖形上下文
// 目前我們所用的上下文都是以UIGraphics開頭的
// CGContextRef Ref飲用 CG:目前使用到的類型和函數(shù) 一般都是CG開頭 CoreGraphics
CGContextRef ctf = UIGraphicsGetCurrentContext();
// 2描述路徑
// 創(chuàng)建路徑
CGMutablePathRef path = CGPathCreateMutable();
//設(shè)置起點(diǎn)
//path:給哪個路徑設(shè)置起點(diǎn) CGAffineTransform:形變 x斑胜、y代表起點(diǎn)
CGPathMoveToPoint( path, NULL, 50, 50);
//添加一根線到某個點(diǎn)
CGPathAddLineToPoint(path, NULL, 200, 200);
// 3把路徑添加到上下文
CGContextAddPath(ctf, path);
// 4渲染上下文
CGContextStrokePath(ctf);
}
.
- (void)drawLine1{
// 獲取上下文
CGContextRef ref = UIGraphicsGetCurrentContext();
// 描述路徑
// 設(shè)置起點(diǎn) 在這底層會幫我們創(chuàng)建一個path
CGContextMoveToPoint(ref, 150, 150);
CGContextAddLineToPoint(ref, 50, 50);
// 渲染上下文
CGContextStrokePath(ref);
}
.
-(void)drawLine2{
//UIKIT已經(jīng)幫我們封裝了一些繪圖的功能
UIBezierPath *path = [UIBezierPath bezierPath];
// 設(shè)置起點(diǎn)
[path moveToPoint:CGPointMake(50, 50)];
// 添加一根線到某個點(diǎn)
[path addLineToPoint:CGPointMake(100, 100)];
// 繪制路徑
[path stroke];
}