将渐变应用于多个UIViews

时间:2012-08-24 17:53:11

标签: objective-c xcode uiview gradient

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

    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,这让我有点难过。欢迎任何建议。

谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

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

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

...