ios基本圖形繪製

 一.框架的介紹
    Core Graphics Framework是一套基於C的API框架,使用了Quartz(Quartz是蘋果開發的API)作爲繪圖引擎。它提供了低級別、輕量級、高保真度的2D渲染,該框架可以用於基於路徑的繪圖、變換、顏色管理、脫屏渲染,模板、漸變、遮蔽、圖像數據管理、圖像的創建、遮罩以及PDF文檔的創建、顯示和分析。

      Quartz 2D在UIKit中也有很好的封裝和集成,我們日常開發時所用到的UIKit中的組件都是由Core Graphics進行繪製的。不僅如此,當我們引入UIKit框架時系統會自動引入Core Graphics框架,並且爲了方便開發者使用在UIKit內部還對一些常用的繪圖API進行了封裝。
 
  二 繪圖步驟
   1.在uivew上繪圖,第一步初創建UIview的子類,調用方法:
-(void)drawRect:(CGRect)Rect;

2.獲得上下文的環境,創建一個畫布

Graphics Context是圖形上下文,可以將其理解爲一塊畫布,我們可以在上面進行繪畫操作,繪製完成後,如果要在view上繪圖,則將畫布放到我們的view中顯示即可,view看作是一個畫框.

CGContextRef     context=UIGraphicsGetCurrentContext();

3.創建並設置路徑
4.將路徑添加到上下文
5.設置上下文狀態
6.繪製路徑

 三  常用的api
  CGContextAddRect(context,rect)   //繪製矩形 

CGContextAddEllipseInRect(context, CGRectMake(x, y, width, height));     //繪製橢圓形

CGContextAddArc(context, 250, 40, 40, 0, 2*PI, 0); //繪製一個圓

CGContextSetLineWidth(context, 2.0);//設置線的寬度

CGContextSetFillColorWithColor(context,color); //填充顏色

CGContextSetStrokeColorWithColor(context,color)//線框顏色

//繪製文字
[Nsstring drawInrect:(CGRect)withattributs:(NSDictionary *)]

//繪製圖片
[UIimage drawInrect:(CGRect)] //如果尺寸不合適,會拉伸

[ UIimage drawAsPatternInRect:CGRectMake(x, y, width,height)];//平鋪

線條的寬度和線條的虛線樣式
CGContextSetLineWidth、CGContextSetLineDash
線條顏色和線條模式
CGContextSetRGBStrokeColor、CGContextSetGrayStrokeColor、CGContextSetStrokeColorWithColor、CGContextSetStrokePattern
填充顏色和模式
CGContextSetRGBFillColor,CGContextSetGrayFillColor,CGContextSetFillColorWithColor, CGContextSetFillPattern
陰影
CGContextSetShadow、CGContextSetShadowWithColor
整體透明度
CGContextSetAlpha(個別顏色也具有alpha成分)
文本屬性
CGContextSelectFont、CGContextSetFont、CGContextSetFontSize、CGContextSetTextDrawingMode、CGContextSetCharacterSpacing
是否開啓反鋸齒和字體平滑
CGContextSetShouldAntialias、CGContextSetShouldSmoothFonts

四 Demo
Example:

-(void)drawRect:(CGRect)Rect;
{
//取得上下文
CGContextRef context=UIGraphicsGetCurrentContext(); 
//路徑添加到上下文
CGContextAddRect(context,CGRectMake(140, 120, 60, 30));  
//設置上下文狀態:
CGContextSetLineWidth(context, 1.0);
aColor = [UIColor blueColor];
CGContextSetStrokeColorWithColor(context, aColor.CGColor);//線框顏色 
//繪畫路徑
CGContextDrawPath(context, kCGPathFillStroke);
}

五視圖刷新(重繪)
 如果想進行重繪,以下方法可以調用:

1.[self setNeedsDisplay]                            //更新整個視圖

2.[self setNeedsDisplayInRect:CGRect]    //更新視圖的部分區域。


注意:不能直接調用 drawRect方法去刷新視圖,否則會刷新無效

六。圖形上下文變換:繪圖中的座標系
圖形上下文變換:繪圖中的座標系

圖形上下文變換的作用:平移,縮放,旋轉

平移:CGContextTranslateCTM(context,CGFloat x, CGFloat y);

縮放:CGContextScaleCTM(context,CGFloat sx, CGFloat sy);

旋轉:CGContextRoateCTM(context,CGFloat x);

在圖形上下文變換下,進行補充:
CGContextSaveGState與CGContextRestoreGState的作用

使用Quartz時涉及到一個圖形上下文,其中圖形上下文中包含一個保存過的圖形狀態堆棧。在Quartz創建圖形上下文時,該堆棧是空的。CGContextSaveGState函數的作用是將當前圖形狀態推入堆棧。之後,您對圖形狀態所做的修改會影響隨後的描畫操作,但不影響存儲在堆棧中的拷貝。在修改完成後,您可以通過CGContextRestoreGState函數把堆棧頂部的狀態彈出,返回到之前的圖形狀態

什麼時候該用繪圖?

     使用自定義的drawing code一般用在你想要動態的顯示內容變化的時候。一般用在遊戲或者一些繪圖應用中,或者現有的控件ui的樣式不滿足需求。

  繪圖的性能?
  
   Core Graphic控制GPU和CPU之間的數據傳輸。爲了讓像素能夠顯示到屏幕上面,有一些工作是需要CPU的。然後數據會被傳給GPU,然後數據再被處理,最後顯示到屏幕上面

       1.圖代碼可能看上去非常的繁瑣,但它們是非常快的。
  
       2.iOS繪圖系統自身也是非常高效,它不會頻繁調用drawRect:方法,除非迫不得已(或調用了setNeedsDisplay方法)
       3.一旦一個視圖已由自己繪製完成,那麼繪製的結果會被緩存下來留待重用,而不是每次重頭再來。(蘋果公司將緩存繪圖稱爲視圖的位圖存儲回填(bitmap backing store))

         將代碼移到drawRect:方法中是提高性能的普遍做法。這是因爲繪圖引擎直接對屏幕進行渲染相對於先是脫屏渲染然後再將像素拷貝到屏幕要來的高效
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章