很久沒有更新博文,今天把之前就想研究的quartz2D看了下,瞭解了些簡單的作畫方法,趕緊記錄下來。學習Quartz2D的主要目的是爲了以後更加方便的自定義一些界面控件時用到,畢竟大部分app都有個性化的定製界面。以下紀錄一些常用的簡單作圖方法。
想要自定義的控件基本都是繼承自UIView,然後重寫其drawRect方法。Quartz2D的方法都是純c的,所有通用的步驟都是先獲取上下文,然後再進行內部自定義,最後渲染,而且它的自帶函數多半都是CGContext開頭的:
1.獲取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
2.進行自定義做圖
...具體方法在後面單個舉例
3.渲染(針對不同情況,進行不同的渲染)
CGContextStrokePath(ctx); //空心
CGContextFillPath(ctx); //實心
舉例1:畫直線
//獲取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
//設置起止點
CGContextMoveToPoint(ctx,20,100); //起點
CGContextAddLineToPoint(ctx,50,150); //終點
[[UIColor redColor] set]; //設置繪製的顏色
CGContextSetLineCap(ctx,kCGLineCapRound); //起止點的樣式(圓形)
CGContextSetLineJoin(ctx,kCGLineJoinRound); //轉角點的樣式(圓形)
//最關鍵的一步-----渲染
CGContextStrokePath(ctx); //要注意,線條不要渲染爲實心的
舉例2:畫三角形
重複的方法這裏不寫了,仍然是先獲取上下文,設置起點,第一個轉折點,終點,最後再回到起點即可。
CGContextMoveToPoint(ctx,20,100); //起點
CGContextAddLineToPoint(ctx,100,100); //轉折點
CGContextAddLineToPoint(ctx,50,150); //終點
CGContextAddLineToPoint(ctx,20,100); //回到起點
當然還有自帶的封閉方法可以調用:
CGContextClosePath(ctx); //會自動將起點和終點連接起來
舉例3:畫矩形
//專用方法
CGContextAddRect(ctx,CGRectMake(100,100,100,80));
然後設置一些基本的屬性後就可以渲染了,既可以渲染成空心,也可以是實心
舉例4:畫圓形
//專用方法(其實也是畫橢圓的方法)
CGCoontextAddArc(ctx,100,100,50,0,2*M_Pi,0);
//參數要注意下:
參數2和3:圓心座標
參數4:圓的半徑
參數5:開始繪製的角度
參數6:結束繪製的角度
參數7:繪製的方向(0順時針,1逆時針)
可以渲染成空心,也可以是實心
舉例5:畫橢圓
//專用方法
CGContextAddEllipseInRect(ctx,CGRectMake(100,100,50,60));
說明一下,這個方法既可以用來畫橢圓,也可以用來畫圓,寬高不同爲橢圓,相同即爲圓。
舉例5:畫圓弧
//這裏使用的是畫圓的方法
CGCoontextAddArc(ctx,100,100,50,M_Pi_2,M_Pi,0);
//然後調用連接起止點的方法即可
CGContextClosePath(ctx);
舉例6:畫餅形
//畫餅形要先畫一條直線,然後使用這條直線的長度畫圓即可
CGContextMoveToPoint(ctx,100,100);
CGContextAddLineToPoint(ctx,100,150);
// 畫圓
CGCoontextAddArc(ctx,100,100,50,M_Pi_2,M_Pi,0);
//最後渲染即可
這裏要總結的說一點:所有的繪製過程必須寫在獲取上下文之後和渲染之前,這是標準的繪製過程。對於不同的需求,採取不同的渲染(空心和實心)。