IOS開發(107)之Quartz 2D繪圖

來源:互聯網
上載者:User
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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.