Use this function (replacing the old gradient layer with a new one):
#define kGradientLayerKey @"MyGradientLayer" void makeViewGradient(UIView *pView,CGColorRef clr1,CGColorRef clr2) { CAGradientLayer *gradient = [CAGradientLayer layer]; [gradient setValue:@"1" forKey:kGradientLayerKey]; gradient.frame = pView.bounds; gradient.colors = [NSArray arrayWithObjects:(id)clr1,(id)clr2,nil]; CALayer *pGradientLayer = nil; NSArray *ar = pView.layer.sublayers; for (CALayer *pLayer in ar) { if ([pLayer valueForKey:kGradientLayerKey]) { pGradientLayer = pLayer; break; } } if (!pGradientLayer) [pView.layer insertSublayer:gradient atIndex:0]; else [pView.layer replaceSublayer:pGradientLayer with:gradient]; pView.backgroundColor = nil;//free memory ! }
source share