视图层insertSublayer未更新图层

时间:2015-04-02 15:13:47

标签: ios objective-c uiview colors calayer

我正在尝试在我的视图中添加渐变图层,第一次运行代码时,它会完美地插入图层,但每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未更新?

2 个答案:

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