I suggest using the CGDisplayFade API for Quartz Display Services. It is very easy to use and does not require βhackingβ with fake full-screen windows or views.
See here: Service Guide for Quartz Screens
A simple implementation would look like this:
-(void)flashScreenUsingFlashColor:(NSColor *)flashColor inDuration:(NSTimeInterval)inDuration outDuration:(NSTimeInterval)outDuration{ CGDisplayFadeReservationToken fadeToken; NSColor *colorToUse = [flashColor colorUsingColorSpaceName: NSCalibratedRGBColorSpace]; CGError error = CGAcquireDisplayFadeReservation (inDuration + outDuration, &fadeToken); if (error != kCGErrorSuccess){ NSLog(@"Error aquiring fade reservation. Will do nothing."); return; } CGDisplayFade (fadeToken, inDuration, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, colorToUse.redComponent, colorToUse.greenComponent, colorToUse.blueComponent, true); CGDisplayFade (fadeToken, outDuration, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal,colorToUse.redComponent, colorToUse.greenComponent, colorToUse.blueComponent, false); }
source share