1

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];
}
rmaddy
  • 314,917
  • 42
  • 532
  • 579
Denis
  • 61
  • 1
  • 10

1 Answers1

3

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];
}
Craig Siemens
  • 12,942
  • 1
  • 34
  • 51