1

CAGradientLayerlayoutSubview. 这可行,但如果我改变方向,旧框架似乎不会消失。

- (void) layoutSubviews
{ 
    CAGradientLayer *bgLayer = [GradientClass getGradient];
    bgLayer.frame = [[self.subviews objectAtIndex:0] frame];
    [self.layer insertSublayer:bgLayer atIndex:0];
}
4

1 回答 1

3

那是因为layoutSubviews在您旋转设备时再次调用,导致CAGradientLayer创建第二个。

您需要做的就是保留对您的引用CAGradientLayer并修改其框架。

// 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];
}
于 2013-09-13T14:53:49.163 回答