在drawRect:方法中繪制圖片,文字以及Core Graphics 框架的了解
阿新 • • 發佈:2017-08-07
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 1112 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 框架的了解