我正在尝试在我的视图中添加渐变图层,第一次运行代码时,它会完美地插入图层,但每10秒我再次运行相同的函数来更改图层,但它不会更新图层。
if ([[self.view.layer sublayers] count]>1) {
CAGradientLayer *gradientLayer=[ColorUtilities randomGradient];
gradientLayer.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self.view.layer insertSublayer:gradientLayer atIndex:0];
//[self.view.layer replaceSublayer:[[self.view.layer sublayers] objectAtIndex:0] with:gradientLayer];
}
此处[ColorUtilities randomGradient]
每次都会给我一个随机图层。
为什么图层atindex:0
未更新?
答案 0 :(得分:0)
在索引0处插入新的渐变图层会将其置于第一次插入的渐变图层下方,因此无法显示。尝试使用insertLayer将其插入到最后一个渐变图层上方:上面:
答案 1 :(得分:0)
@dominikweifieg评论有点有效。只需保留一个标记,如果您第一次添加图层,则在此之后替换子图层
这样的事情应该起作用
-(void)updateGradientLayer
{
//isFirstTimeInserting is a global BOOL
if (isFirstTimeInserting==YES) {
CAGradientLayer *gradientLayer=[ColorUtilities randomGradient];
gradientLayer.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self.view.layer insertSublayer:gradientLayer atIndex:0];
isFirstTimeInserting=NO;
}
else
{
if ([[self.view.layer sublayers] count]>=1) {
CAGradientLayer *gradientLayer=[ColorUtilities randomGradient];
gradientLayer.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self.view.layer insertSublayer:gradientLayer above:[[self.view.layer sublayers] objectAtIndex:0]];
}
}
}