2013-03-19 27 views
22

Ci sono due metodi: drawRectCGContextSaveGState vs UIGraphicsPushContext

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

E

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

UIGraphicsPushContext/UIGraphicsPopContext sono da UIKit mentre CGContextSaveGState/CGContextRestoreGState sono da CoreGraphics.

domande: qual è la differenza tra questi metodi? Quale è meglio usare? Ci sono alcuni esempi di provare un metodo migliore rispetto ad altri e viceversa?

risposta

34

UIGraphicsPushContext(context) spinge contesto in uno stack di CGContextRefs (rendendo contesto contesto disegno corrente), mentre CGContextSaveGState(context) spinge lo stato grafico corrente nello stack di grafici membri mantenuto da contesto. Dovresti usare UIGraphicsPushContext se hai bisogno di creare un nuovo CGContextRef nel contesto di disegno corrente, e dovresti usare CGContextSaveGState quando lavori con un contesto grafico e vuoi solo salvare, ad esempio: lo stato di trasformazione corrente, i colori di riempimento o di traccia, ecc.

0

UIGraphicsPushContext (ctx) è utile quando si desidera disegnare con UIkit e il contesto corrente non è il contesto in cui si desidera disegnare. Si utilizza questa funzione per rendere corrente il contesto che si desidera disegnare. contesto. CGContextSaveGState (ctx) salva contesto (riferito a ctx), in seguito è possibile ripristinare il contesto CGContextRestoreGState()