【问题标题】:How to use CAGradientLayer in layoutSubview by changing orientation如何通过更改方向在 layoutSubview 中使用 CAGradientLayer
【发布时间】:2013-09-13 09:49:39
【问题描述】:
我在layoutSubview 中创建了一个CAGradientLayer。这可行,但如果我改变方向,旧框架似乎不会消失。
- (void) layoutSubviews
{
CAGradientLayer *bgLayer = [GradientClass getGradient];
bgLayer.frame = [[self.subviews objectAtIndex:0] frame];
[self.layer insertSublayer:bgLayer atIndex:0];
}
【问题讨论】:
标签:
ios
objective-c
gradient
layoutsubviews
【解决方案1】:
那是因为在您旋转设备时再次调用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];
}