有两种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/

10-12 04:20