查看图层 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]];
}
}
}
我正在尝试向我的视图添加一个渐变层,第一次当我 运行 代码完美地插入该层但是每 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]];
}
}
}