1 前言
使用Quartz 2D繪圖時候,我們常會用到UIView的子類,想該類的drawRect:方法中添加Quartz函數調用。每次需要重繪視圖時候都會調用該方法。
2 詳述
在Quartz 2D中,和其他Core Graphics中一樣,繪圖是在圖形上下文中進行的,通常,只稱上下文。繪圖時候,我們需要檢索當前上下文,使用此上下文進行各種Quartz圖形調用,並且讓此上下文負責將圖形呈現到視圖上。
下面代碼將檢索當前上下文:
CGContextRef context = UIGraphicsGetCurrentContext();
Core Graphics和OpenGL都是基於C的API。
定義了圖形上下文之後,可以將該上下文傳遞給各種Core Graphics繪圖函數來繪製。例如繪製一條4像素寬的直線:
//建立當前路徑的直線為4像素,可將其看做筆刷的大小,直到再次調用函數設定的一個不同的值前,所有的直線寬度都為4
CGContextSetLineWidth(context, 4.0);
//畫筆設定為紅色(包括比劃顏色即輪廓的顏色,填充顏色用於填充形狀)
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
//將當前路徑的端點移動到該位置,無需實際繪製任何圖形。
CGContextMoveToPoint(context, 10.0, 10.0);
//繪製一條線到(20,20)
CGContextAddLineToPoint(context, 20.0, 20.0);
//告知Quartz使用CGContextStrokePath繪製直線。
CGContextStrokePath(context);
2.1 座標系
//將當前路徑的端點移動到該位置,無需實際繪製任何圖形。
CGContextMoveToPoint(context, 10.0, 10.0);
//繪製一條線到(20,20)
CGContextAddLineToPoint(context, 20.0, 20.0);
這些浮點數表示在Core Graphics座標系中的位置。由x和y座標表示,我們通常用(x,y)來表示。上下文左上方為(0,0)。向下移動的時候y增加,向右移動的時候,x增加。
最後我們繪製了一條(10,10)到(20,20)的對角線。
若要獲得某一點應用CGPoint,如果獲得對象大小,則使用CGSize。Quartz還聲明一個名為CGRect的資料類型,它用於座標系中定義矩形。CGRect包含兩個元素,一個是名為origin的CGPoint,他確定矩形的左上方,另一個是名為size的CGSize,她確定矩形的寬度和高度。
2.2 顏色
UIKit提供了一個Objective-C類:UIColor。不能在Core Graphics調用中直接使用UIColor對象,因為UIColor是CGColor的封裝器,所以可以像我們之前在以下程式碼片段中所做的一樣,使用她的CGColor屬性從UIColor執行個體中檢索CGColor引用。
//畫筆設定為紅色(包括比劃顏色即輪廓的顏色,填充顏色用於填充形狀)
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
2.2.1 IOS裝置顯示的顏色理論
現代電腦中,通常用4個要素(即紅色,綠色,藍色(RGB顏色)模型和透明度)表示顏色。在Quartz 2D中,這些都是CGFloat類型,並且只能在0.0到1.0之間取值。
取之範圍為0.0到1.0的浮點值通常被稱為限定浮點變數,有時候簡稱限定變數。顏色值還有個透明度alpha,顏色模型為RGBA。
2.2.2 顏色便利方法
UIColor提供了許多便利方法,如果需要可以通過 return [UIColor colorWithRed:1.0f green:0.0f blue:0.0f alpha:1.0f]自訂色彩的值;
2.3 在上下文中繪製映像
使用Quartz 2D,可以在上下文中直接繪製映像。例如UIImage,方法:
(1)制定一個CGPoint來確定映像的左上方;
(2)或者制定一個CGRect來框住映像,並根據需要調整映像大小使其合適概況。
可以在上下文中繪製一個UIImage,如下:
CGPoint drawPoint = CGPointMake(100.0f, 100.0f);
[image drawAtPoint:drawPoint];
2.4 繪製形狀:多邊形,直線和曲線
Quartz 2D提供了許多函數,簡化了複雜形狀的建立。如:繪製橢圓,定義它所適合的矩形並且讓Core Graphics執行以下任務:
//繪製橢圓
//檢索當前上下文
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect theRect = CGRectMake(0,0,100,100);
CGContextAddEllipseInRect(context, theRect);
CGContextDrawPath(context, kCGPathFillStroke);
運行結果:
直線:
橢圓:
3 結語
以上是所有內容,希望對大家有所協助。
Demo代碼執行個體:http://download.csdn.net/detail/u010013695/5548373