1. 程式人生 > >在drawRect:方法中繪制圖片,文字以及Core Graphics 框架的了解

在drawRect:方法中繪制圖片,文字以及Core Graphics 框架的了解

graphic csg line 要求 arc 畫圖 cgrect 有一個 get

 1 -(void)drawRect:(CGRect)rect{
 2     
 3     // 畫同心圓,初始化Bezier對象
 4     UIBezierPath *path = [[UIBezierPath  alloc]init];
 5     float maxRadio = 50.0;
 6     float currentRadio;
 7 
 8     // 設置畫筆顏色,Bezier類沒有設置線條顏色的屬性,但是在OtherView中說可以用UIColor類設置顏色(線條和填充)
 9      [[UIColor redColor] setStroke];
10     
11
12 for (currentRadio = maxRadio; currentRadio > 0; currentRadio -= 10) { 13 // 拿起畫筆 ,移動畫筆到下一個圖形的起點 ,不然會直接移動過去,會有兩個圖形間會有連接線 14 [path moveToPoint:CGPointMake(200+currentRadio, 250)] ; 15 16 //clockwise 順時針屬性 為yes,表示順時針畫(0-1.5M_PI),NO表示畫(1.5M_PI - 2M_PI) 17 [path addArcWithCenter:CGPointMake(200
, 250) radius:currentRadio startAngle:0 endAngle:2* 18 M_PI clockwise:YES]; 19 20 21 } 22 23 // 在uiimage 和nsstring 中系統提供了想用的方法,來繪制。 24 //圖片 25 UIImage *logoIMage = [UIImage imageNamed:@"3.png"]; 26 [logoIMage drawInRect:CGRectMake(183, 233, 34, 34)]; 27 28 // 字符串 29 NSString * str = [NSString stringWithFormat:@"我是畫上去的"];
/*文本屬性
相應的文本屬性有很多,可以參看辣條的http://blog.csdn.net/qq_32531823/article/details/54379623
*/
30 [str drawInRect:CGRectMake(20, 700, 300, 50) withAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15]}]; 31 32 33 //線條寬度 34 // path.lineWidth = 5.0; 35 // 線頭樣式 無,方頭,圓頭 36 // path.lineCapStyle = 2; 37 38 39 // 開始畫 40 [path stroke]; 41 42 }

以上這些繪制原理都是基於 Core Graphics 框架完成的,所以有一些 關於繪制很高的要求時,可以去查一查 相關API。

下面是使用 Core Graphics的簡單代碼實例, 這個框架是一套提供2D繪圖功能的C語言API,使用C結構和C函數模擬了一套面向對象的編程機制,並沒有OC中的對象和方法。Core Graphics 中的CGContextRef 負責儲存繪畫狀態(畫筆顏色線條之類的)和繪制內容所出空間。

1 為什麽它能儲存 繪制內容所儲存的空間

很多Core Graphics 框架中的類型 都帶有Ref後綴,這種類型是用來模擬面向對象C結構。Core Graphics “對象”(CGContextRef) 與OC的對象都是在堆上分配內存的,所以再起被創建時,都會返回一個指向對象內存地址的指針。(像CGPoint 這種結構簡單,沒後後綴的, 就是在棧上分配內存的)。即CGContextRef 是一種結構指針(結構名後加一個 *)。比如說 CGColor (不直接使用)結構 有一個表示CGColor * 的類型 CGColorRef (一般用這個)。

註意: 帶有Ref後綴的類型對象可能擁有指向其它Core Graphics “對象”的強引用指針,而作為其他”對象“的擁有者時,ARC無法識別 這類強引用和 “對象”的所有權,所以必須在使用後手動 release掉它。

規則:使用名稱中帶有 creat或者copy的函數創建了一個Core Graphics ”對象“,就必須手動release。

下面代碼就很好示例了

-(void)drawRect:(CGRect)rect{  
// 開啟圖形上下文
    CGContextRef currentCotext =  UIGraphicsGetCurrentContext();
    //設置畫筆顏色
    CGContextSetRGBStrokeColor(currentCotext, 1, 0, 0, 1);
    //創建一個可變路徑
    CGMutablePathRef  cgpath = CGPathCreateMutable();
    //路徑開始點
    CGPathMoveToPoint(cgpath, NULL, 200, 100);
    //添加一條線到點200,200
    CGPathAddLineToPoint(cgpath, NULL, 200, 200);
    //添加路徑到圖形上下文
    CGContextAddPath(currentCotext, cgpath);
    // 畫圖形上下文的路徑
    CGContextStrokePath(currentCotext);
    // release 掉 路徑指針
    CGPathRelease(cgpath);
}

在drawRect:方法中繪制圖片,文字以及Core Graphics 框架的了解