I have a UIView / CALayer which I would like to darken. How can I as fast as possible darken it? Is there any way to avoid blending?
Following alternatives is known to me
- create a non-opaque CALayer and set background color and opacity and add it as a sublayer above main layer
- same as above using UIView (can be a tad slower...?)
- render view/layer to UIImage and doing drawing with CoreGraphics (is way too slow and content is dynamic/changing)
Someone gave me a tip to have a dark background on the superview/superlayer and set an alpha of the view I want to darken. That way I don't need to add an extra layer/view.
The potential drawback with this is that the view you want to darken will be offscreen rendered if groupview opacity is on (on by default on iOS 7 and above).
Create a non-opaque CALayer and set background color and opacity and add it as a sublayer above main layer
I had to do something like this. For anyone curious for the actual code:
// assuming the view you're trying to darken is called 'mainUIView'
// make the dark layer the same size as the view you're overlaying
UIView *darkBackgroundView = [[UIView alloc] initWithFrame:mainUIView.frame];
CALayer *darkenLayer = darkBackgroundView.layer;
// background color
darkenLayer.backgroundColor = [UIColor blackColor].CGColor;
// transparency (0 is transparent, 1 is solid)
// you can adjust this for the level of darkness you prefer
darkenLayer.opacity = 0.75f;
[mainUIView addSubview:darkBackgroundView];