如何重置或清除与CGContext关联的剪贴蒙版?

时间:2013-09-06 01:46:19

标签: iphone core-graphics cgcontext

我正在使用CGContext并使用基于CGImageRef的蒙版:

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextClipToMask(context, rect, _firstMaskImageRef);
CGContextSetFillColorWithColor(context, color);
CGContextFillRect(context, rect);

我有第二个面具然后我想切换到:

CGContextClipToMask(context, rect, _secondMaskImageRef);
CGContextSetFillColorWithColor(context, color); // color has changed FWIW
CGContextFillRect(context, rect); // as has rect

但是,这会交叉两个蒙版而不是替换第一个蒙版。

你如何(如果可以)清除或重置CGContext的剪贴蒙版?

3 个答案:

答案 0 :(得分:17)

您可以在设置剪贴蒙版之前保存图形状态,然后将其重置,如下所示:

CGContextSaveGState (context);
...Set your first clipping mask, fill it, etc.
CGContextRestoreGState (context);
...Do other stuff

答案 1 :(得分:4)

要重置剪贴蒙版,请使用:

CGContextResetClip(context);

答案 2 :(得分:0)

更高版本的Swift(3 +?)使用以下语法:

context.saveGState()
// set your clipping mask, etc.
context.restoreGState()
// everything's back to normal