介紹一下Quartz 2D,主要資料來源于蘋果官網(wǎng);不足之處有請 大家拍磚。
Quartz 2D是iPhone OS和Mac OS X環(huán)境下的二維繪圖引擎。借用Quartz 2D API,你可以接觸到這樣一些特性:基于路徑的繪圖,透明度繪圖,遮蓋,陰影,透明層,顏色管理,防鋸齒渲染,生成PDF,以及PDF元數(shù)據(jù)相關(guān)處理。可能的時候,Quartz 2D會借助硬件的力量。
在Mac OS X下,Quartz 2D能與其它圖形圖像技術(shù)相結(jié)合——Core Image,Core Video,OpenGL,以及Quick Time。
類似的,在iPhone OS下的Quartz 2D也能與其它的圖像和動畫技術(shù)相結(jié)合——Core Animation,OpenGL ES,以及UIKit類。
1. 頁面(Page)
Quartz 2D使用畫筆模型——每一個繪圖操作在一塊輸出畫布上進(jìn)行一層繪制(paint),這個畫布就叫做頁面。繪制在頁面上的東西無法改動,除非修改該頁面。
下圖顯示了“后來者居上”的遮蓋順序。頁面可以是一張真正的紙(如果輸出設(shè)備是打印機(jī));可以是一張?zhí)摂M的紙(如果輸出設(shè)備是pdf);甚至可以是一幅位圖。
2. 繪制目標(biāo):圖形內(nèi)容(Graphics Context)
圖形內(nèi)容是一個復(fù)雜的數(shù)據(jù)類型(CGContextRef),用于封裝Quartz用于繪圖的信息。這些信息包括了繪圖參數(shù)以及頁面上的繪圖的代表。
同一幅畫可以繪制到不同的設(shè)備上,而只需要改變圖形內(nèi)容的,無需改變Quartz繪制順序。你不需要自行針對設(shè)備進(jìn)行計算——Quartz會替你完成這一切。
?
3. Quartz 2D的模糊數(shù)據(jù)類型(Opaque Data Type)
在圖形內(nèi)容之外,Quartz 2D還定義了一系列模糊數(shù)據(jù)類型,均以CG為前綴。其中三種數(shù)據(jù)類型如下圖所示。
?
4. 圖形狀態(tài)(Graphics States)
Quartz 2D根據(jù)當(dāng)前的圖形狀態(tài)來修改繪圖結(jié)果。例如,當(dāng)你調(diào)用函數(shù)來填充顏色時,你同時也就修改了儲存在圖形狀態(tài)中的數(shù)值。其它常用的圖形狀態(tài)顏色包括線寬,當(dāng)前位置,以及字體大小。
圖形內(nèi)容包含了一個堆棧,儲存了圖形狀態(tài)。初建圖形內(nèi)容時,此堆棧為空。圖形狀態(tài)可以通過函數(shù) CGContextSaveGState 和 CGContextRestoreGState 來保存和恢復(fù)。
5.Quartz 2D坐標(biāo)
Quartz 2D的坐標(biāo)體系如下圖所示,原點在左下方。
考慮到不同的設(shè)備有著不同的圖像能力,因此圖形的位置和大小必需獨(dú)立于設(shè)備來定義——這由當(dāng)前變換矩陣(CTM)來完成。
6. 內(nèi)存管理
幾個簡單實用的準(zhǔn)則:
6.1 如果你創(chuàng)建或復(fù)制一個對象,該對象的retain值會加一;因此你也必需釋放它。具體反映在帶有Create或Copy的函數(shù)名當(dāng)中。
6.2 反之,如果函數(shù)名中沒有Create或Copy,你就不需要釋放。
6.3 如果你不擁有一個對象但需要使用它,你可以retain之后再釋放
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

