我已经在CAGradientLayer
中创建了layoutSubview
。这可行,但是如果我改变方向,似乎旧框架不会消失。
- (void) layoutSubviews
{
CAGradientLayer *bgLayer = [GradientClass getGradient];
bgLayer.frame = [[self.subviews objectAtIndex:0] frame];
[self.layer insertSublayer:bgLayer atIndex:0];
}
最佳答案
那是因为旋转设备时会再次调用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];
}