Reputation: 71
I have created a CAGradientLayer
in a layoutSubview
. This works, but if I change orientation it seems that the old frame doesn't disappear.
- (void) layoutSubviews
{
CAGradientLayer *bgLayer = [GradientClass getGradient];
bgLayer.frame = [[self.subviews objectAtIndex:0] frame];
[self.layer insertSublayer:bgLayer atIndex:0];
}
Upvotes: 2
Views: 593
Reputation: 13276
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];
}
Upvotes: 4