Quartz 2D:是一個二維圖形繪制引擎,支持iOS環境與Mac OS X 環境;實現功能如:基本路徑的繪制、透明度、描影、繪制陰影、透明層、顏色管理、反鋸齒、PDF文檔生成、PDF元數據訪問,可以借助圖形硬件的功能完成需求,在Mac OS X中,可以與其它圖形圖像技術混合使用,如:Core Image, Core Video, OpenGL, QuickTime, 可以從一個QuickTime圖形導入器中創建一個圖像。
Quartz2D的API是純C;
Quartz2D的API來自于Core Graphics框架;
圖形上下文:CGContextRef類型的數據;
1> 保存繪圖信息與繪圖狀態;
2> 決定繪制的輸出目標;
CGPathRef:
CGContextStrokenPath():
如何利用Quartz2D繪制東西到view上?
首先得有圖形上下文,因為它能保存繪圖信息,并且決定著繪制到什么地方去;
其次那個圖形上下文必須跟view相關聯,才能將內容繪制到view上面;
自定義view的步驟:
新建一個類,繼承自UIView,實現drawRect:(CGRect)rect;方法,然后在這個方法中取得根當前view相關聯的圖形上下文,繪制相應的圖形內容,利用圖形上下文將繪制的所有內容渲染顯示到view上面;
在drawRect:方法中才能取得跟view相關的圖形上下文;
當view第一次顯示到屏幕上時候,被加到UIWindow上顯示出來;或者是,調用view的setNeedsDisplayInRect:時;drawRect:方法就被調用了;
- (void)drawRect:(CGRect)rect
{
// Drawing code
// 獲取當前視圖
CGContextRef contex = UIGraphicsGetCurrentContext();
// 設置起點
CGContextMoveToPoint(contex, 10, 100);
// 設置終點
CGContextAddLineToPoint(contex, 100, 100);
// 設置線顏色
CGContextSetRGBStrokeColor(contex, 1.0, 0, 0, 1.0);
// 設置線寬度
CGContextSetLineWidth(contex, 10);
// 設置線條起點和終點樣式
CGContextSetLineCap(contex, kCGLineCapRound);
// 設置線條轉角的樣式
CGContextSetLineJoin(contex, kCGLineJoinRound);
// 設置一條空心的線
CGContextStrokePath(contex);
// 畫三角形 設置第一個點
CGContextMoveToPoint(contex, 130, 100);
// 設置第二個點
CGContextAddLineToPoint(contex, 150, 300);
// 設置第三個點
CGContextAddLineToPoint(contex, 200, 200);
// 關閉起點和終點
CGContextClosePath(contex);
// 渲染在layer圖層上
CGContextStrokePath(contex);
// 繪畫四邊形
CGContextAddRect(contex, CGRectMake(260, 300, 80, 80));
CGContextStrokePath(contex);
// 繪制圓
CGContextAddArc(contex, 50, 300, 20, 0, 2 * M_PI, 1);
[[UIColor redColor] set];
CGContextFillPath(contex);
// 繪制橢圓
CGContextAddEllipseInRect(contex, CGRectMake(60, 350, 180, 90));
CGContextStrokePath(contex);
// 繪制圓弧
CGContextAddArc(contex, 100, 430, 50, M_PI_2, M_PI, 0);
CGContextClosePath(contex);
CGContextStrokePath(contex);
// 繪制餅圖
CGContextMoveToPoint(contex, 300, 440);
CGContextAddLineToPoint(contex, 300, 490);
CGContextAddArc(contex, 300, 440, 50, M_PI_2, M_PI, 0);
CGContextClosePath(contex);
[[UIColor orangeColor] set];
CGContextFillPath(contex);
}