Changing .hidden = true will not become visible until the execution path returns to the main runloop. The second line is probably locked for a few seconds, preventing these changes from occurring (or drawRect takes a lot of time further down the pipeline).
The simplest solution would be to postpone the second line until the next iteration of runloop:
self.vignetteView.hidden = YES;
Also, a small point: you should use the constants YES and NO for BOOL properties and arguments instead of true and false .
source share