0

我在将渐变应用于多个视图时遇到了一些问题,代码如下:

    CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view6.bounds;
gradient.frame = view7.bounds;
gradient.frame = view8.bounds;
gradient.frame = view9.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor], (id)[[UIColor colorWithRed:231.0/255.0 green:231.0/255.0 blue:231.0/255.0 alpha:1.0] CGColor], nil];
[view6.layer insertSublayer:gradient atIndex:0];
[view7.layer insertSublayer:gradient atIndex:0];
[view8.layer insertSublayer:gradient atIndex:0];
[view9.layer insertSublayer:gradient atIndex:0];

那么我做错了什么?目前,渐变仅应用于 view9,这让我有点难过。欢迎任何建议。

谢谢!

4

2 回答 2

2

您需要制作 4 个渐变,每层一个,但您可以重复使用颜色。

目前,每次将该层添加为子层时,都会先将其拉出上一层。

于 2012-08-24T17:55:45.780 回答
0

每次要将图层添加到子图层时,都应该创建图层。

好的方法是创建GradientView:UIView类而不是覆盖drawRect方法并绘制渐变或将渐变层添加到代码中另一个位置的子视图。这种方式更有用,因为如果你想改变渐变的颜色,你必须只在一个地方改变代码(GradientView)

另一种方法是创建方法,该方法将为每个视图构建渐变层。

- (CAGradientLayer *)gradientLayerWithFrame:(CGRect)frame colors:(NSArray *)colors
{
    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = frame;
    gradient.colors = colors;
    return gradient;
}

...

NSArray *colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor], (id)[[UIColor colorWithRed:231.0/255.0 green:231.0/255.0 blue:231.0/255.0 alpha:1.0] CGColor], nil];

[view6.layer insertSublayer:[self gradientLayerWithFrame:view6.bounds colors:colors] atIndex:0];
[view7.layer insertSublayer:[self gradientLayerWithFrame:view7.bounds colors:colors] atIndex:0];

...

于 2012-08-24T17:55:41.297 回答