iOS繪圖上下文的理解

在調(diào)用drawRect:方法之前,繪圖系統(tǒng)創(chuàng)建了一個圖形上下文(CGContext)。上下文包括大量信息,比如畫筆顏色、文本顏色、當(dāng)前字體、變形等。有時你可能想要修改上下文并使其恢復(fù)原樣。舉個例子,你現(xiàn)在有一個使用特定顏色繪制特定形狀的函數(shù)。由于只能有一只畫筆,因此在更改顏色后,就會影響調(diào)用函數(shù)的結(jié)果。為了避免這個副作用,你可以使用CGContextSaveGState和CGContextRestoreGState將上下文入棧和出棧。

不要與看起來相似的UIGraphicsPushContext和UIGraphicsPopContext混淆。它們做的并不是同一件事。CGContextSaveGState記錄上下文的當(dāng)前狀態(tài)。UIGraphicsPushContext更改當(dāng)前上下文。以下是CGContextSaveGState的示例。

[[UIColor redColor]setStroke];

CGContextSaveGState(UIGraphicsGetCurrentContext());

[[UIColor blackColor]setStroke];

CGContextRestoreGState(UIGraphicsGetCurrentContext());

UIRectFill(CGRectMake(10,10,100,100));//紅

這段代碼設(shè)置了畫筆的顏色為紅色并保存了上下文。之后它將把畫筆顏色改成黑色并恢復(fù)上下文。這樣當(dāng)你繪圖的時候,畫筆又會變成紅色了。

使用UIGraphicsPushContext并不能保存上下文的當(dāng)前**狀態(tài)**(畫筆顏色、線條寬度等),而是完全切換上下文。假設(shè)你正在當(dāng)前視圖上下文中繪制什么東西,這時想要在位圖上下文中繪制完全不同的東西。如果要使用UIKit來進(jìn)行任意繪圖,你會希望保存當(dāng)前的UIKit上下文,包括所有已經(jīng)繪制的內(nèi)容,接著切換到一個全新的繪圖上下文中。這就是UIGraphicsPushContext的功能。創(chuàng)建完位圖后,再將你的舊上下文出棧。而這就是UIGraphicsPopContext的功能。這種情況只會在要使用UIKit在新的位圖上下文中繪圖時才會發(fā)生。只要你使用的是Core Graphics函數(shù),就不需要去執(zhí)行上下文入棧和出棧,因為Core Graphics函數(shù)將上下文視作參數(shù)。

轉(zhuǎn)自:http://blog.csdn.net/nlforever/article/details/11835725

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容