iOS實現圖形編程可以使用三種API(UIKIT、Core Graphics、OpenGL ES及GLKit)

來源:互聯網
上載者:User

標籤:準備   規範   應用開發   UIBE   物件導向   處理   scan   屬性   文本   

這些api包含的繪製操作都在一個圖形環境中進行繪製。一個圖形環境包含繪製參數和所有的繪製需要的裝置特定資訊,包括螢幕圖形環境、offscreen 位元影像環境和PDF圖形環境,用來在螢幕表面、一個位元影像或一個pdf檔案中進行圖形和映像繪製。在螢幕圖形環境中進行的繪製限定於在一個UIView類或其子類的執行個體中繪製,並直接在螢幕顯示,在offscreen位元影像或PDF圖形環境中進行的繪製不直接在螢幕上顯示。

一、UIKIT API

UIKIT是一組Objective-C API,為線條圖形、Quartz映像和顏色操作提供Objective-C 封裝,並提供2D繪製、影像處理及使用者介面層級的動畫。

UIKIT包括UIBezierPath(繪製線、角度、橢圓及其它圖形)、UIImage(顯示映像)、UIColor(顏色操作)、UIFont和UIScreen(提供字型和螢幕資訊)等類以及在位元影像圖形環境、PDF圖形環境上進行繪製和 操作的功能等, 也提供對標準視圖的支援,也提供對列印功能的支援。

在UIKIT中UIView類本身在繪製時自動建立一個圖形環境(對應Core Graphics層的CGContext類型)作為當前的圖形繪製環境。在繪製時可以調用UIGraphicsGetCurrentContext 函數獲得當前的圖形環境。

二、Core Graphics 與Quartz 2D API

Core Graphics是一套C-based API, 支援向量圖形,線、形狀、圖案、路徑、剃度、位元影像映像和pdf 內容的繪製。

Quartz 2D 是Core Graphics中的2D 繪製呈現引擎。Quartz是資源和裝置無關的,提供路徑繪製,anti-aliased呈現,剃度填充圖案,映像,透明繪製和透明層、遮蔽和陰影、顏色管理,座標轉換,字型、offscreen呈現、pdf文檔建立、顯示和分析等功能。

Quartz 2D能夠與所有的圖形和動畫技術(如Core Animation, OpenGL ES, 和 UIKit 等)一起使用。

Quartz採用paint模式進行繪製。

Quartz 中使用的圖形環境也由一個類CGContext表示。

在Quartz 中可以把一個圖形環境作為一個繪製目標。當使用Quartz 進行繪製時,所有裝置特定的特性被包含在你使用的特定類型的圖形環境中,因此通過給相同的映像操作函數提供不同的映像環境你就能夠畫相同的映像到不同的裝置上,因此做到了映像繪製的裝置無關性。

Quartz 為應用提供如下幾個圖形環境:

1)位元影像圖形環境,用來建立一個位元影像。

使用函數CGBitmapContextCreate來建立。

2)PDF圖形環境,用來建立一個pdf檔案。

Quartz 2D API提供了兩個函數來建立一個PDF圖形環境:

CGPDFContextCreateWithURL,帶有一個作為pdf 輸出的位置的Core Foundation URL來建立一個pdf 圖形環境。

CGPDFContextCreate, 當想PDF 輸出到一個data consumer時使用該函數。

3) 視窗圖形環境,用來在一個視窗上進行繪製。

4) 層環境(CGLayer) ,是一個與另一個圖形環境關聯的offscreen繪製目標,使用層環境的目的是為了最佳化繪製層到建立它的圖形環境的效能。層環境能夠比位元影像圖形環境提供更好的offscreen繪製效能。

Quartz提供的主要類包括:

CGContext:表示一個圖形環境;

CGPath:使用向量圖形來建立路徑,並能夠填充和stroke;

CGImage:用來表示位元影像;

CGLayer:用來表示一個能夠用於重複繪製和offscreen繪製的繪製層;

CGPattern:用來表示Pattern,用於重複繪製;

CGShading和 CGGradient:用於繪製剃度;

CGColor 和 CGColorSpace;用來進行顏色和色彩空間管理;

CGFont, 用於繪製文本;

CGPDFContentStream、CGPDFScanner、CGPDFPage、CGPDFObject,CGPDFStream, CGPDFString等用來進行pdf檔案的建立、解析和顯示。

三、OpenGL ES和GLKit

OpenGL ES是一套多功能開放標準的用於嵌入系統的C-based的圖形庫,用於2D和3D資料的可視化。OpenGL被設計用來轉換一組圖形調用功能到底層圖形硬體(GPU),由GPU執行圖形命令,用來實現複雜的圖形操作和運算,從而能夠高效能、高幀率利用GPU提供的2D和3D繪製能力。

OpenGL ES規範本身不定義繪製表面和繪製視窗,因此ios為了使用它必須提供和建立一個OpenGLES 的呈現環境,建立和配置儲存繪製命令結果的framebuffer 及建立和配置一個或多個呈現目標。

在 iOS中使用EAGL提供的EAGLContext類 來實現和提供一個呈現環境,用來保持OpenGLES使用到的硬體狀態。  EAGL是一個Objective-C API,提供使OpenGL ES與Core Animation和UIKIT整合的介面。

在調用任何OpenGLES 功能之前必須首先初始化一個EAGLContext 對象。

每一個iOS應用的每一個線程都有一個當前context,在調用OpenGLES函數時,使用或改變此context中的狀態。

EAGLContext 的類方法setCurrentContext:用來設定當前線程的當前context。EAGLContext 的類方法currentContext 返回當前線程的當前context。在切換相同線程的兩個上下文之前,必須調用glFlush函數來確保先前已提交的命令被提交到圖形硬體中。

可以採用不同的方式使用OpenGL ES以便呈現OpenGL ES內容到不同的目標:GLKit和CAEAGLLayer。

為了建立全螢幕的視圖或使OpenGL ES內容與UIKit視圖整合,可以使用GLKit。在使用GLKit時,GLKit提供的類GLKView類本身實現呈現目標及建立和維護一個framebuffer。

為了使OpenGL ES內容作為一個Core Animation層的部分內容時,可以使用CAEAGLLayer 作為呈現目標,並需要另外建立framebuffer以及自己實現和控制整個繪製流程。

GLKit是一組Objective-C 類,為使用OpenGL ES 提供一個物件導向介面,用來簡化OpenGL ES應用的開發。GLKit支援四個3D應用開發的關鍵領域:

1) GLKView 和GLKViewController類提供一個標準的OpenGLES視圖和相關聯的呈現迴圈。GLKView可以作為OpenGLES內容的呈現目標,GLKViewController提供內容呈現的控制和動畫。視圖管理和維護一個framebuffer,應用只需在framebuffer進行繪畫即可。

2)GLKTextureLoader 為應用提供從iOS支援的各種映像格式的源自動載入紋理映像到OpenGLES 映像環境的方式,並能夠進行適當的轉換,並支援同步和非同步載入方式。

3)數學運算庫,提供向量、矩陣、四元數的實現和矩陣堆棧操作等OpenGL ES 1.1功能。

4)Effect效果類提供標準的公用著色效果的實現。能夠配置效果和相關的頂點資料,然後建立和載入適當的著色器。GLKit 包括三個可配置著色效果類:GLKBaseEffect實現OpenGL ES 1.1規範中的關鍵的燈光和材料模式, GLKSkyboxEffect提供一個skybox效果的實現, GLKReflectionMapEffect 在GLKBaseEffect基礎上包括反射映射支援。

使用GLKView和OpenGLES進行繪製過程:

1)建立一個GLKView 對象

GLKView 對象可以編程或使用Interface Builder來建立和配置。

在採用編程方式時,首先建立一個context然後調用initWithFrame:context:方法。

使用Interface Builder方式時,在從storyboard載入一個GLKView後,建立一個context和設定它作為視圖的context屬性.

在iOS中GLKit的使用需要建立OpenGL ES 2.0以上的圖形環境context。

GLKit視圖自動建立和配置它所有的OpenGLES framebuffer對象和renderbuffers,可以通過修改視圖的drawable屬性來控制這些對象的屬性。

2)繪製OpenGL內容(發布繪製命令)

使用GLKit視圖繪製OpenGL內容需要三個子步驟:準備OpenGLES基礎;發布繪製命令;呈現顯示內容到Core Animation。       GLKit類本身已經實現了第一個和第三個步驟,使用者只需實現第二個步驟,在視圖的方法drawRect或視圖的代理對象的glkView:drawInRect:中調用適當的OpenGLES繪製命令進行內容繪製。

GLKViewController類維護一個animation 呈現迴圈(包含兩個方法update和display),用來實現連續的動畫複雜的情境。

animation 呈現迴圈的交替速率由GLKViewController的屬性framesPerSecond 指示,並使用preferredFramesPerSecond 屬性來修改它。

四、其它圖形編程相關API

1)Core Animation

Core Animation是一套Objective-C API,實現了一個高效能的複合引擎,並提供一個簡單易用的編程介面,給使用者UI添加平滑運動和動態反饋能力。

Core Animation 是 UIKit實現動畫和變換的基礎,也負責視圖的複合功能。使用Core Animation可以實現定製動畫和細粒度的動畫控制,建立複雜的、支援動畫和變換的layered 2D視圖。

Core Animation不屬於繪製系統,但它是以硬體複合和操作顯示內容的基礎設施。這個基礎設施的核心是layer對象,用來管理和操作顯示內容。在ios 中每一個視圖都對應Core Animation的一個層對象,與視圖一樣,層之間也組織為層關係樹。一個層捕獲視圖內容為一個被映像硬體容易操作的位元影像。在多數應用中層作為管理檢視的方式使用,但也可以建立獨立的層到一個層關係樹中來顯示視圖不夠支援的顯示內容。

OpenGL ES的內容也可以與Core Animation內容進行整合。

 

http://blog.sina.com.cn/s/blog_1308b909c0102vzvf.html

iOS實現圖形編程可以使用三種API(UIKIT、Core Graphics、OpenGL ES及GLKit)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.