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];
}
有帮助吗?

解决方案

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];
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top