2013-03-19 37 views
22

有兩種方法的drawRect:CGContextSaveGState VS UIGraphicsPushContext

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(context); 
    // do drawing here 
    CGContextRestoreGState(context); 
} 

而且

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    UIGraphicsPushContext(context); 
    // do drawing here 
    UIGraphicsPopContext(); 
} 

UIGraphicsPushContext/UIGraphicsPopContext從UIKit的 而CGContextSaveGState/CGContextRestoreGState從CoreGraphics在

問題:這些方法有什麼區別?哪一個更好用?是否有一些證明一種方法比其他方法更好的例子,反之亦然?

回答

34

UIGraphicsPushContext(context)推上下文壓CGContextRefs(使上下文的當前繪圖上下文)的堆疊,而CGContextSaveGState(context)將當前圖形狀態到圖形的疊層各州保持由上下文。如果您需要創建新的CGContextRef當前繪圖上下文,則應該使用UIGraphicsPushContext,並且當您使用一個圖形上下文並且只想保存時,應該使用CGContextSaveGState,例如:當前變換狀態,填充或筆觸顏色,等等。

0

UIGraphicsPushContext(ctx)在您想要使用UIkit進行繪製並且當前上下文不是您想要繪製的上下文時非常有用。您可以使用此函數使要繪製的上下文變爲當前上下文。 CGContextSaveGState(ctx)保存上下文(由ctx引用),稍後可以恢復上下文使用CGContextRestoreGState()

相關問題