我有一个视图,里面有另一个视图(称为swipeView)。我正在尝试使用CAGradientLayer对其进行渐变颜色 - 代码位于
之下CAGradientLayer *layer = [CAGradientLayer layer];
layer.colors = [NSArray arrayWithObjects:(id)[UIColor darkGrayColor].CGColor,
[UIColor lightGrayColor].CGColor, nil];
layer.frame = swipeView.bounds;
[swipeView.layer insertSublayer:layer atIndex:0];
我在主视图控制器的ViewDidLoad方法中调用它。我看不出任何效果 - 我试图着色的视图仍然是一样的。我究竟做错了什么?还有其他设置/订购等我应该知道吗?
答案 0 :(得分:2)
我不知道这是否是您遇到的问题,但我只是有完全相同的症状,经过几个小时的困扰后,我发现了我的问题:我正在创建一个按钮,添加渐变图层,只有稍后定位按钮。最初,按钮尺寸均为0,设置layer.frame = swipeView.bounds;
时,我将渐变图层设置为0尺寸。我添加了代码,以便在调整按钮大小时,我还调整子层的大小以匹配,这解决了问题。我实际上使用的是MonoTouch,因此代码如下所示:
btn.Frame = new RectangleF([the dimensions you need]);
foreach(var s in btn.Layer.Sublayers)
{
s.Frame = btn.Bounds;
}
也许你在代码中创建一个视图,并且视图的大小或位置没有,所以当你添加渐变时它也没有大小,这就是你无法看到的原因。当视图改变大小时(可能在ViewDidLayoutSubviews
中),调整渐变层的大小,看看是否能解决它。
答案 1 :(得分:0)
那应该有用。你确定你正确连接了swipeView插座吗?调试你的-viewDidLoad并验证swipeView不是nil。还要仔细检查边界(layer.frame)是否合理。
它没有必要,但你可以试着投掷[layer setNeedsDisplay]
只是为了强制再次渲染图层,但我不认为这是你的问题。
答案 2 :(得分:0)
CAGradientLayer *layer = [CAGradientLayer layer];
layer.colors = [NSArray arrayWithObjects:(id)[UIColor darkGrayColor].CGColor,
(id)[UIColor lightGrayColor].CGColor, nil];
layer.frame = swipeView.bounds;
[swipeView.layer insertSublayer:layer atIndex:0];
确保swipeView不是nil并尝试使用swipeView.frame。
答案 3 :(得分:0)
在颜色数组的末尾不需要nil终止符。
另外,我发现insertSublayer不起作用,索引为0或1.更改为简单的addSublayer就可以了。