繪圖與動畫.
繪圖最主要的還是原理:上下文環境..
幾點疑問想要解決??
引擎和框架的區別,什么是引擎.
- 引擎是實現一些具體的功能的,如繪圖引擎,是為(CG)框架服務的.
什么是渲染??
計算機中的渲染是什么意思?什么原理?
- 就是把抽象的可視化的東西(物理模型或者數據模型),變成屏幕上可以顯示的二維圖像.
Bezier曲線?
拋物線么??
做游戲真的需要很好的算法基礎嗎??
引擎與框架
引擎是實現一些具體的功能的,如繪圖引擎,是為框架服務的.
Quartz 2D:二維繪圖引擎(純C語言的API,產生于Core Graphics簡稱CG框架)
Cosos 2D:2D游戲引擎.
Unity 3D:3D游戲引擎.
iOS繪圖中數據類型和函數一般都是以CG前綴開頭的.
繪圖的三個步驟:
- 獲取當前上下文(環境).
- 繪制路徑.
- 渲染(顯示內容)
注意:在Quarts 2D中畫線如果是相連的,就不要寫起點了.
pragma mark - 4.繪圖的方式
- 純C 語言 (上下文 直接添加路徑)
- 純C 語言 (創建路徑 再添加進上下文)
- C 語言 嵌套(OC 的路徑)
- C 語言 嵌套(C 的路徑 嵌入 OC 的路徑)
- 純OC
關鍵語法:
1. CGContextRef ctx = UIGraphicsGetCurrentContext(); //聯系上下文環境.
2. CGMutablePathRef path = CGPathCreateMutable(); //創建C路徑
//有Creat就要釋放:存在于CG,CF框架中.
// CGPathRelease(<#CGPathRef _Nullable path#>)
// CGImageRelease(<#CGImageRef _Nullable image#>)
// CFRelease(<#CFTypeRef cf#>)
3. UIBezierPath *pathOc = [UIBezierPath bezierPathWithCGPath:path]; //創建OC路徑對象
4. CGContextAddPath(ctx, path.CGPath); //添加路徑
5. 渲染,(path對象調用方法一種,C函數一種)
6. 起始點,movePoint,添加線addLine.都是CG開頭,或者對象調用.
pragma mark - 5.drawrect
關于drawRect的幾點疑問:
- 為什么繪圖的代碼都寫在drawRect方法中.
- 首先這個方法非常特別,繪圖代碼只能寫在這里面才能由系統調用起作用.其他地方不生效.且只能第一次調用,如果你想要改變你所繪圖形,不能手動調用這個方法了(只能系統調用,可以通過手動[self setNeedDisplay]來調用系統的這個方法.
- drawRect方法中的(CGRect)rect參數的作用.
- rect參數就是代表你的Bounds.你所繪制的范圍.
- 什么時候調用drawRect方法
- 在加載View的時候.
- 如何重繪.為什么需要重繪.
- 不重繪無法顯示,哪個方法只能生成一次圖像,無法改變
- 主動調用drawRect方法可以嗎?
- 不可以只能系統調用,手動調用不成功,可以[self setNeedDisplay]間接調用.
繪圖練習
- 三角形(trigon)
- 矩形(rectangle)
- 圓形(circle)
- 橢圓(ellipse/oval)
- 圓弧(arc)
stroke筆畫的意思,fill填充.
繪圖的樣式
誰渲染誰設置!!!!
- 設置線寬
- 線頭樣式(線的一頭,連接就變了).
- 拐角樣式(線連接的地方)
- 顏色
- 渲染方式
//線寬
path.lineWidth = 20;
//線頭LineCap
/*
kCGLineCapButt,低點尖角
kCGLineCapRound,圓角
kCGLineCapSquare高點尖角
*/
path.lineCapStyle = kCGLineCapSquare;
//拐角LineJoin
/*
kCGLineJoinMiter,//尖角
kCGLineJoinRound,//圓角
kCGLineJoinBevel,//切斜角
*/
path.lineJoinStyle = kCGLineJoinMiter;
//顏色
[[UIColor redColor] setStroke];
[[UIColor brownColor] setFill];
如果單獨只寫set,系統是根據系統模式自動判斷.
單詞意思:butt:斜,round:圓弧,square:直角的,miter:尖角,Bevel:切斜角,cap:帽子,join:連接.
渲染的方式
空心,實心.
9.0 基偶填充規則 【了解】
基數填充,偶數不填充
kCGPathEOFill
10.0 非零繞數填充規則 【了解】
當一個點被從左到右覆蓋過標記為1
從右到左覆蓋過標記為-1
當標記為0的時候不填充,其他則填充
簡單總結,這個規則與方向有關,與次數無關
餅狀圖
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:starAngle endAngle:endAngle clockwise:YES];
//for循環依次創建扇形.每次改變首尾位置.
//渲染
柱狀圖
同上只是創建path的方式發生改變,每次的x,y,H改變來改變矩形的形狀.
滑塊與餅狀圖
//將UISilder創建拖動事件的方法.sender.value來監聽改變的值,傳到餅狀圖中,注意此時因為你的數據是改變的,要調用實時改變繪圖的方法.