1. 程式人生 > >iOS開發UI篇—Quartz2D使用(繪制基本圖形)

iOS開發UI篇—Quartz2D使用(繪制基本圖形)

esper control del creat col cal end layer bubuko

一、簡單說明

圖形上下文(Graphics Context):是一個CGContextRef類型的數據

圖形上下文的作用:保存繪圖信息、繪圖狀態

決定繪制的輸出目標(繪制到什麽地方去?)(輸出目標可以是PDF文件、Bitmap或者顯示器的窗口上)

技術分享圖片

相同的一套繪圖序列,指定不同的Graphics Context,就可將相同的圖像繪制到不同的目標上。

技術分享圖片

Quartz2D提供了以下幾種類型的Graphics Context:

Bitmap Graphics Context

PDF Graphics Context

Window Graphics Context

Layer Graphics Context

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.創建Bitmap圖形上下文的方法

//方法1 UIGraphicsBeginImageContext(<#CGSize size#>);

//方法2 UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale)

使用兩個方法同樣都可以創建,但是使用第一個方法將來創建的圖片清晰度和質量沒有第二種方法的好。 方法2接收三個參數:

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值給這些函數

iOS開發UI篇—Quartz2D使用(繪制基本圖形)