查看图层 insertSublayer 未更新图层

View Layer insertSublayer is not updating the layer

我正在尝试向我的视图添加一个渐变层,第一次当我 运行 代码完美地插入该层但是每 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 处插入新的渐变层会将其置于您第一次插入的渐变层之下,因此它不可见。尝试使用 insertLayer:above:

将其插入最后一个渐变层之上

@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]];
        }
    }
}