Thats because layoutSubviews
is called again when you rotate the device, causing a second CAGradientLayer
to be created.
All you should need to do is just keep a reference to your CAGradientLayer
and just modify its frame.
// Define bgLayer in your interface
@property (strong, nonatomic) CAGradientLayer *bgLayer;
- (void) layoutSubviews
{
if (!self.bgLayer) {
self.bgLayer = [GradientClass getGradient];
[self.layer insertSublayer:bgLayer atIndex:0];
}
self.bgLayer.frame = [[self.subviews objectAtIndex:0] frame];
}