CGContextSaveGState vs UIGraphicsPushContext
有两个drawRect方法:
- (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 。
问题 :这些方法有什么区别? 哪一个更好用? 是否有一些比其他方法更好的certificate方法,反之亦然?
UIGraphicsPushContext(context)
将上下文推送到CGContextRefs的堆栈(使上下文成为当前的graphics上下文),而CGContextSaveGState(context)
将当前的graphics状态推送到由上下文维护的graphics状态堆栈上。 如果您需要创build新的CGContextRef当前绘图上下文,则应该使用UIGraphicsPushContext,并且在使用一个graphics上下文时只应使用CGContextSaveGState,并且只想保存,例如:当前变换状态,填充或笔触颜色,等等
UIGraphicsPushContext(ctx)在你想用UIkit绘制时是很有用的,而且当前的上下文不是你想要绘制的上下文。你使用这个函数使你想绘制的上下文成为当前的上下文。 CGContextSaveGState(ctx)保存上下文(由ctx引用),稍后可以使用CGContextRestoreGState()恢复上下文