iOS開發UI篇—Quartz2D使用(繪製基本圖形)
一、簡單說明
Quartz 2D:是⼀個蘋果官方的⼆維繪圖引擎,同時支持iOS和Mac OS X系統(跨平臺,Quartz 2D的API是純 C 語⾔的)。包含在 Core Graphics 框架中Cocos 2D :(Cocos2D-x、Cocos2D-iPhone、Cocos2D-HTML5等), Cocos2D 是一個 第三⽅開源的2D遊戲框架。做2D 遊戲的 還有 Sprite Kit。 一般3D 遊戲用 unity3D。
繪圖能用OC對象就不用C語言,繪製的東西其實是繪製到view的 。能用UIView就不要自己繪圖
1、繪製圓角矩形
圓角半徑超過邊長一半的2/3就是圓
⾃定義view的步驟
➢ 新建⼀個類,繼承自UIView
➢ 實現- (void)drawRect:(CGRect)rect⽅法,然後在這個⽅法中 ● 取得跟當前view相關聯的圖形上下⽂
● 繪製相應的圖形內容
● 利用圖形上下⽂將繪製的所有內容渲染顯⽰示到view上⾯
圖形上下文(Graphics Context):是一個CGContextRef類型的數據
圖形上下文的作用:保存繪圖信息、繪圖狀態
決定繪製的輸出目標(繪製到什麼地方去?)(輸出目標可以是PDF文件、Bitmap或者顯示器的窗口上)
相同的一套繪圖序列,指定不同的Graphics Context,就可將相同的圖像繪製到不同的目標上。
Quartz2D提供了以下幾種類型的Graphics Context:
1、Bitmap Graphics Context
2、PDF Graphics Context
3、Window Graphics Context
4、Layer Graphics Context
5、Printer Graphics Context
只要上下文不同,繪製的地方就不同。
本文說明如何把圖片繪製到Bitmap上面去,即要求生成一張圖片,圖片上面保存了繪圖信息。
Bitmap就是圖片,相當於系統的UIimage。一個UIImage就是一個Bitmap
二、怎麼把圖片繪製到Bitmap上?
注意:不能在drawRect:方法中直接獲取Bitmap的上下文,需要我們自己進行創建。
代碼示例:
1 // 2 // YYViewController.m 3 // 06-繪製基本圖形 4 // 5 // Created by apple on 14-6-22. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import "YYViewController.h" 10 11 @interface YYViewController () 12 @property (weak, nonatomic) IBOutlet UIImageView *iv; 13 @end 14 15 @implementation YYViewController 16 17 - (void)viewDidLoad 18 { 19 [super viewDidLoad]; 20 21 //加載圖片 22 //0.創建一個Bitmap上下文 23 //c語言的方法 24 // CGBitmapContextCreate(<#void *data#>, <#size_t width#>, <#size_t height#>, <#size_t bitsPerComponent#>, <#size_t bytesPerRow#>, <#CGColorSpaceRef space#>, <#CGBitmapInfo bitmapInfo#>) 25 //oc中封裝的方法 26 //方法1 27 // UIGraphicsBeginImageContext(<#CGSize size#>); 28 //方法2 29 UIGraphicsBeginImageContextWithOptions( CGSizeMake(200, 200), NO, 0); 30 //1.獲取bitmap上下文 31 CGContextRef ctx = UIGraphicsGetCurrentContext(); 32 //2.繪圖(畫一個圓) 33 CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 100, 100)); 34 //3.渲染 35 CGContextStrokePath(ctx); 36 //4.獲取生成的圖片 37 UIImage *image=UIGraphicsGetImageFromCurrentImageContext(); 38 //5.顯示生成的圖片到imageview 39 self.iv.image=image; 40 //6.保存繪製好的圖片到文件中 41 //先將圖片轉換爲二進制數據,然後再將圖片寫到文件中 42 // UIImageJPEGRepresentation(image, 1); //第二個參數爲保存的圖片的效果 43 NSData *data=UIImagePNGRepresentation(image); 44 [data writeToFile:@"/Users/apple/Desktop/abc.png" atomically:YES]; 45 } 46 47 - (void)didReceiveMemoryWarning 48 { 49 [super didReceiveMemoryWarning]; 50 // Dispose of any resources that can be recreated. 51 } 52 53 @end
程序執行效果:
程序執行完畢後,會在指定的位置創建一個abc.png的圖片
補充說明:
//方法1 UIGraphicsBeginImageContext(<#CGSize size#>);
//方法2 UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale)
CGSize size:指定將來創建出來的bitmap的大小
BOOL opaque:設置透明YES代表透明,NO代表不透明
CGFloat scale:代表縮放,0代表不縮放
創建出來的bitmap就對應一個UIImage對象
2.Quartz2D的內存管理
使用含有“Create”或“Copy”的函數創建的對象,使用完後必須釋放,否則將導致內存泄露
使用不含有“Create”或“Copy”的函數獲取的對象,則不需要釋放
如果retain了一個對象,不再使用時,需要將其release掉
可以使用Quartz 2D的函數來指定retain和release一個對象。例如,如果創建了一個CGColorSpace對象,則使用函數CGColorSpaceRetain和CGColorSpaceRelease來retain和release對象。
也可以使用Core Foundation的CFRetain和CFRelease。注意不能傳遞NULL值給這些函數