iOS上使用Quartz 2D繪製簡單圖形

    繪製圖形是經過重載UIView的- (void)drawRect:(CGRect)rect方法來實現的,因此首先須要一個繼承自UIView的類,而後重寫這個類的- (void)drawRect:(CGRect)rect方法。當咱們使用這個類的對象時,view顯示時回調自身的drawRect方法,從而把咱們會繪製在view上的東西呈現出來。drawRect方法只有一個CGRect 參數傳入,這個值是view的frame。數組

   一、繪製直線:spa

CGContextRef context = UIGraphicsGetCurrentContext();  //首先構建一個context,全部繪製都須要的
        CGContextSetLineWidth(context, 2.0);  //設置線條的寬度
        CGContextSetStrokeColorWithColor(context, [UIColor brownColor].CGColor); //設置線條的顏色
        
        CGContextMoveToPoint(context, 10, 10);     //移動到某個點
        CGContextAddLineToPoint(context, CGRectGetMaxX(rect)-10, 10); //添加一條線,後兩個參數提供一個新的點的座標,結合上面的點,構成一條線段的兩端。
        
        CGContextStrokePath(context);   //最後,繪製整個路徑,前面的一系列移動、添加線條、點之類的能夠說提供了一個路徑,而後經過這個方法,把路徑繪製出來。
    context,個人理解中,它是一個配置參數的集合,好比線條顏色、線條寬度,一直繪製過程的整個路徑都包含在裏面,它貫通了整個繪製的過程,把各個參數結合到一塊兒。

   而繪製的過程,其實很形象,好比上面繪製線段,能夠想象是一支筆,先移動到點(10,10),而後移動到(CGRectGetMaxX(rect)-10, 10),可是方法是AddLine,也就是這個從一個點到另外一個點得過程是構成一條線段的,就像是說你是按直線畫過去的。3d

  二、繪製矩形:code

   使用上面的繪製線段的方法固然能夠拼接出一個矩形,可是矩形也有單獨的方法。
對象

CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextSetLineWidth(context, 2.0);
        CGContextSetStrokeColorWithColor(context, [UIColor brownColor].CGColor);
        
        CGContextAddRect(context, CGRectMake(10, 10, CGRectGetWidth(rect)-20, CGRectGetHeight(rect)-20));//就這一句話能夠了,傳入一個CGRect類型變量,提供矩形的範圍,按這個範圍畫出矩形。
        
        CGContextStrokePath(context);
  三、繪製橢圓:
<span style="font-size:14px;">CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextSetLineWidth(context, 2.0);
        CGContextSetStrokeColorWithColor(context, [UIColor brownColor].CGColor);
        
        CGContextAddEllipseInRect(context, CGRectMake(10, 10, CGRectGetWidth(rect)-20, CGRectGetHeight(rect)-100));</span><pre name="code" class="objc"><span style="font-size:14px;">//這個方法一樣只提供了一個CGRect變量,也就是一個矩形區域,繪製出的橢圓和這個矩形四邊相切。</span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:12px;">橢圓的形狀靠長短軸的大小能夠肯定下來,矩形的長寬提供了,而矩形的中心肯定了橢圓的中心,這樣橢圓就能夠肯定下來了。</span></span>
CGContextStrokePath(context);

 
四、繪製圓形: 
CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextSetLineWidth(context, 2.0);
        CGContextSetStrokeColorWithColor(context, [UIColor brownColor].CGColor);
        CGContextAddArc(context, 160, 200, 100, M_PI/3.0, M_PI/2.0, 1);//繪製圓弧

        CGContextStrokePath(context);

CGContextAddArc 方法實際是一個繪製圓弧的方法,第一個參數傳入context,第二個和第三個參數構成圓弧圓心的座標,第四個參數是圓弧的半徑,第五個參數是圓弧的開始角度,第六個參數是圓弧的結束角度,最後一個參數用來指定圓弧的方向,本來傳入0是逆時針、1是順時針,可是由於Quartz 2D的座標系和UIView的座標系是y軸相反的,因此1是逆時針、0是順時針。跳幀傳入的起始、結束角度能夠畫出完整的圓。繼承

繪製圓弧還有一個方法:ip

CGContextMoveToPoint(context, 10, 10);  //提供一個當前所在點
        CGContextAddArcToPoint(context, 10, 160, 40, 160,100);//繪製圓弧

這裏的思路是,首先有三個點,假設爲A,B,C,而後鏈接A,B構成一條線,B,C鏈接構成另外一條線,並且兩線交於B點,而後就畫一個圓弧分別與兩條線相切,而且半徑等於指定的半徑。因此須要3個點和一個半徑。CGContextAddArcToPoint這個方法第二個和第三個參數提供一點B的座標,第三個和第四個提供點C的座標,而這是須要一個點A,當前點就是點A,因此須要一個當前點。it

五、貝塞爾曲線:

 CGContextAddCurveToPoint(CGContextRef c, CGFloat cp1x,
  CGFloat cp1y, CGFloat cp2x, CGFloat cp2y, CGFloat x, CGFloat y)
貝塞爾曲線須要提供四個點,曲線的兩個端點以及分別靠近兩個端點的兩個控制點,一樣在調用這個繪製曲線的方法時,也須要有一個當前點,這個當前點會做爲曲線的一個端點。方法最後兩個參數構成另一個端點的座標。而後第2、第三和第4、第五個參數分別構成兩個控制點。控制點並不處在曲線上。經過調節控制點,能夠調節曲線的樣式,從而知足對於各類曲線的要求。

六、繪製虛線:class

CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextSetLineWidth(context, 2.0);
        const CGFloat lengths[] = {16.0f,6.0f,30.0f,40.0f};
        CGContextSetLineDash(context, 0, lengths, 4); //設置虛線的樣式
        CGContextSetStrokeColorWithColor(context, [UIColor brownColor].CGColor);
        
        CGContextAddRect(context, CGRectMake(10, 10, CGRectGetWidth(rect)-20, CGRectGetHeight(rect)-20));
        
        CGContextStrokePath(context);
這裏使用虛線繪製了一個矩形,虛線其實只需設置線條的屬性便可,和上面說的圖形繪製是兩個不一樣方面的問題,能夠同時使用。

對於虛線,關鍵的方法是 CGContextSetLineDash,定義爲:
void CGContextSetLineDash (
   CGContextRef c,
   CGFloat phase,
   const CGFloat lengths[],
   size_t count
);
lengths是一個float類型數組,count是數組裏元素的數量。lengths指出了虛線的樣式,例如
{16.0f,6.0f,30.0f,40.0f}
就是先長度爲16的實線,而後空長度6,再是長度30的實線,再是空缺40長度,而後循環這個過程。
相關文章
相關標籤/搜索