2010-07-18 50 views
1

我有一个视图,里面有另一个视图(称为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

这应该工作。你确定你正确地连接了你的swipeView插座吗?调试你的-viewDidLoad并确认swipeView不是零。再次检查边界(layer.frame)是否合理。

这不应该是必要的,但你可以尝试抛出一个[layer setNeedsDisplay]只是为了强制图层再次渲染,但我不认为这是你的问题在这里。

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不为零并尝试swipeView.frame。

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也许),调整梯度层和看看是否能解决它。

0

你不需要的零终止在颜色数组的结尾。

另外,我发现insertSublayer没有工作,与指数为0或1更改为简单addSublayer的伎俩。