有两种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 。
问题:这些方法之间有什么区别?哪个更好用?是否有一些例子证明一种方法比其他方法更好,反之亦然?
最佳答案
UIGraphicsPushContext(context)
将上下文插入CGContextRefs堆栈(使上下文成为当前绘图上下文),而CGContextSaveGState(context)
将当前图形状态插入由上下文维护的图形状态堆栈。如果需要在当前图形上下文中创建新的CGContextRef,则应使用UIGraphicsPushContext;在使用一个图形上下文并且仅要保存时,应使用CGContextSaveGState,例如:当前的变换状态,填充或描边颜色,等等。
关于ios - CGContextSaveGState与UIGraphicsPushContext,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15505871/