您好,登錄后才能下訂單哦!
很久沒有更新博文,今天把之前就想研究的quartz2D看了下,了解了些簡單的作畫方法,趕緊記錄下來。學習Quartz2D的主要目的是為了以后更加方便的自定義一些界面控件時用到,畢竟大部分app都有個性化的定制界面。以下紀錄一些常用的簡單作圖方法。
想要自定義的控件基本都是繼承自UIView,然后重寫其drawRect方法。Quartz2D的方法都是純c的,所有通用的步驟都是先獲取上下文,然后再進行內(nèi)部自定義,最后渲染,而且它的自帶函數(shù)多半都是CGContext開頭的:
1.獲取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
2.進行自定義做圖
...具體方法在后面單個舉例
3.渲染(針對不同情況,進行不同的渲染)
CGContextStrokePath(ctx); //空心
CGContextFillPath(ctx); //實心
舉例1:畫直線
//獲取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
//設(shè)置起止點
CGContextMoveToPoint(ctx,20,100); //起點
CGContextAddLineToPoint(ctx,50,150); //終點
[[UIColor redColor] set]; //設(shè)置繪制的顏色
CGContextSetLineCap(ctx,kCGLineCapRound); //起止點的樣式(圓形)
CGContextSetLineJoin(ctx,kCGLineJoinRound); //轉(zhuǎn)角點的樣式(圓形)
//最關(guān)鍵的一步-----渲染
CGContextStrokePath(ctx); //要注意,線條不要渲染為實心的
舉例2:畫三角形
重復的方法這里不寫了,仍然是先獲取上下文,設(shè)置起點,第一個轉(zhuǎn)折點,終點,最后再回到起點即可。
CGContextMoveToPoint(ctx,20,100); //起點
CGContextAddLineToPoint(ctx,100,100); //轉(zhuǎn)折點
CGContextAddLineToPoint(ctx,50,150); //終點
CGContextAddLineToPoint(ctx,20,100); //回到起點
當然還有自帶的封閉方法可以調(diào)用:
CGContextClosePath(ctx); //會自動將起點和終點連接起來
舉例3:畫矩形
//專用方法
CGContextAddRect(ctx,CGRectMake(100,100,100,80));
然后設(shè)置一些基本的屬性后就可以渲染了,既可以渲染成空心,也可以是實心
舉例4:畫圓形
//專用方法(其實也是畫橢圓的方法)
CGCoontextAddArc(ctx,100,100,50,0,2*M_Pi,0);
//參數(shù)要注意下:
參數(shù)2和3:圓心坐標
參數(shù)4:圓的半徑
參數(shù)5:開始繪制的角度
參數(shù)6:結(jié)束繪制的角度
參數(shù)7:繪制的方向(0順時針,1逆時針)
可以渲染成空心,也可以是實心
舉例5:畫橢圓
//專用方法
CGContextAddEllipseInRect(ctx,CGRectMake(100,100,50,60));
說明一下,這個方法既可以用來畫橢圓,也可以用來畫圓,寬高不同為橢圓,相同即為圓。
舉例5:畫圓弧
//這里使用的是畫圓的方法
CGCoontextAddArc(ctx,100,100,50,M_Pi_2,M_Pi,0);
//然后調(diào)用連接起止點的方法即可
CGContextClosePath(ctx);
舉例6:畫餅形
//畫餅形要先畫一條直線,然后使用這條直線的長度畫圓即可
CGContextMoveToPoint(ctx,100,100);
CGContextAddLineToPoint(ctx,100,150);
// 畫圓
CGCoontextAddArc(ctx,100,100,50,M_Pi_2,M_Pi,0);
//最后渲染即可
這里要總結(jié)的說一點:所有的繪制過程必須寫在獲取上下文之后和渲染之前,這是標準的繪制過程。對于不同的需求,采取不同的渲染(空心和實心)。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。