引言:
- UIKit依賴于Core Graphics框架,也是基于Core Graphics框架實現的
- Core Graphics其實是一套基于C的API框架,使用了Quartz作為繪圖引擎。這也就意味著Core Graphics不是面向對象的
- Core Graphics需要一個圖形上下文(Context),就是一張畫布
- Core Graphics的圖形上下文(Context)是堆棧式的。只能在棧頂的上下文(畫布)上畫圖。
簡單的繪圖
獲取畫布
CGContextRef context = UIGraphicsGetCurrentContext();// 獲取上下文
畫筆相關:
//設置圖形上下文狀態屬性
CGContextSetRGBStrokeColor(context, 1.0, 0, 0, 1);//設置筆觸顏色
CGContextSetRGBFillColor(context, 0, 1.0, 0, 1);//設置填充色
CGContextSetLineWidth(context, 2.0);//設置線條寬度
CGContextSetLineCap(context, kCGLineCapRound);//設置頂點樣式
CGContextSetLineJoin(context, kCGLineJoinRound);//設置連接點樣式
CGFloat lengths[2] = { 18, 9 };
CGContextSetLineDash(context, 0, lengths, 2);// 用于繪制虛線
CGContextSetShadowWithColor(context, CGSizeMake(2, 2), 0, [UIColor blackColor].CGColor);// 設置陰影
CGContextDrawPath(context, kCGPathFillStroke);//最后一個參數是填充類型
頂點指的是路徑的起始點和結束點,連接點指的是路徑中的轉折點(折現才有)
路徑相關
基礎:
- CGPathAddLineToPoint 通過這個函數,能繪制復雜的折線
- CGContextAddPath(context, path);通過這個函數,把路徑添加到上下文(畫布)中
CGPathMoveToPoint(path, nil, 20, 50);//移動到指定位置(設置路徑起點)
CGPathAddLineToPoint(path, nil, 20, 100);//繪制直線(從起始位置開始)
CGContextAddPath(context, path);// 添加進context之后,調用DrawPath繪制
相關的繪制:
CGContextAddLineToPoint();//繪制直線
CGContextAddCurveToPoint();//橢圓曲線
CGContextAddQuadCurveToPoint();//二次曲線
CGContextAddArcToPoint();//圓形曲線
CGContextClosePath();// 封閉路徑(起點終點會鏈接起來)
提供的封裝:
CGContextAddRect();//繪制矩形
CGContextAddRects();//畫多個矩形
CGContextAddLines();//畫多個線
CGContextAddEllipseInRect();//畫橢圓
CGContextAddArc();//畫圓
繪制相關
CGContextDrawPath(context, kCGPathFillStroke);//最后一個參數是填充類型
釋放內存
//創建路徑
CGMutablePathRef path = CGPathCreateMutable();
// CGPathCreateMutable方法返回的路徑是一個Core Fundation Object。而這并不在ARC的管理范圍之內。所以需要手動釋放對象
CGPathRelease(path);// 釋放
綜上所述,步驟如下:
- 獲取上下文(畫布)
- 創建路徑(自定義或者調用系統的API)并添加到上下文中。
- 進行繪圖內容的設置(畫筆顏色、粗細、填充區域顏色、陰影、連接點形狀等)
- 開始繪圖(CGContextDrawPath)
- 釋放路徑(CGPathRelease)