ios objective-c drawrect cgcontext

ios - CGContextSaveGState vs UIGraphicsPushContext



objective-c drawrect (2)

Hay dos métodos drawRect:

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

Y

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

UIGraphicsPushContext / UIGraphicsPopContext son de UIKit, mientras que CGContextSaveGState / CGContextRestoreGState son de CoreGraphics .

Preguntas : ¿Cuál es la diferencia entre esos métodos? ¿Cuál es mejor usar? ¿Hay algunos ejemplos de probar un método mejor que otro y viceversa?


UIGraphicsPushContext (ctx) es útil cuando desea dibujar con UIkit y el contexto actual no es el contexto en el que desea dibujar. Utilice esta función para hacer que el contexto que desea dibujar se convierta en el contexto actual. CGContextSaveGState (ctx) guardar contexto (referido por ctx), luego puede restaurar el contexto usando CGContextRestoreGState ()


UIGraphicsPushContext(context) empuja el contexto en una pila de CGContextRefs (haciendo del contexto el contexto de dibujo actual), mientras que CGContextSaveGState(context) empuja el estado actual de los gráficos en la pila de estados gráficos mantenidos por contexto. Debería usar UIGraphicsPushContext si necesita hacer un nuevo contexto de dibujo actual a CGContextRef, y debería usar CGContextSaveGState cuando trabaje con un contexto de gráficos y solo desee guardar, por ejemplo: el estado actual de transformación, los colores de relleno o trazo, etc.