CGcontextSaveGStateとCGcontextRestoreGStateの役割

1137 ワード

CGcontextSaveGStateとCGcontextRestoreGStateの役割
Quartzを使用する場合は、保存されたグラフィックステータススタックを含むグラフィックコンテキストに関連します.Quartzでグラフィックコンテキストを作成すると、スタックは空になります.CGContextSaveGState関数は、現在のグラフィック状態をスタックにプッシュする役割を果たす.その後、グラフィックステータスを変更すると、その後の描画操作に影響しますが、スタックに格納されているコピーには影響しません.修正が完了すると、CGContextRestoreGState関数でスタックの上部のステータスをポップアップし、前のグラフィックステータスに戻ることができます.このような押し込みとポップアップの方法は、前のグラフィック状態に戻る迅速な方法であり、すべての状態修正を1つずつ取り消すことを避ける.これも、クリップパスなどのステータスを元の設定に戻す唯一の方法です.
 
    UIGraphicsBeginImageContextWithOptions(targetRect.size, YES, 0.0);
    CGContextRef context = UIGraphicsGetCurrentContext();
   
    float myFillColor[] = {1,0,0,1}; //red;
    CGContextSaveGState(context);
    
    CGContextSetRGBFillColor(context, 0,1,1,1);
    CGContextFillRect(context, targetRect);
    CGContextSetFillColor(context, myFillColor);
    CGContextFillEllipseInRect(context, targetRect);
    CGContextFillPath(context);
    CGContextRestoreGState(context);
        
    UIImage *uiImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();