7

我正在绘制到 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 的剪贴蒙版?

4

3 回答 3

17

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

CGContextSaveGState (context);
...Set your first clipping mask, fill it, etc.
CGContextRestoreGState (context);
...Do other stuff
于 2013-09-06T04:00:51.967 回答
7

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

CGContextResetClip(context);
于 2017-12-21T20:49:25.257 回答
0

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

context.saveGState()
// set your clipping mask, etc.
context.restoreGState()
// everything's back to normal
于 2017-11-03T16:16:50.747 回答