Search code examples
iosobjective-cuiviewcolorscalayer

View Layer insertSublayer is not updating the layer


I am trying to add a gradient layer to my view, first time when I run the code it inserts the layer perfectly but every 10 sec I run the same function again to change the layer but it doesn't update the layer.

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

here [ColorUtilities randomGradient] gives me a random layer every time.

why layer atindex:0 is not updated?


Solution

  • @dominikweifieg comment is somewhat valid. Just keep a flag that if you added the layer first time then replace the sublayer after that

    something like this should work

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