2013-09-06 8 views
6

Rysuję do CGContext i za pomocą maski do CGImageRef własnych:Jak mogę zresetować lub wyczyścić maskę przycinającą powiązaną z CGContext?

CGContextRef context = UIGraphicsGetCurrentContext(); 

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

mam drugą maskę, że potem chcesz się przełączyć:

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

ale ten przecina dwa maski zamiast zastępować pierwszą.

W jaki sposób (jeśli możesz) wyczyścić lub zresetować maskę przycinającą dla CGContext?

Odpowiedz

15

Można zapisać stan grafiki przed ustawieniem maski obcinania, a następnie przywrócić je później, jak to: (? 3+)

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

Późniejsze wersje Swift użyć następującej składni zamiast:

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

Aby przywrócić maskę obcinania, należy:

CGContextResetClip(context); 
Powiązane problemy