Iphone 渐变层未显示/正在处理现有视图

Iphone 渐变层未显示/正在处理现有视图,iphone,cocoa-touch,iphone-sdk-3.0,core-graphics,Iphone,Cocoa Touch,Iphone Sdk 3.0,Core Graphics,我有一个视图,其中有另一个视图(称为swipeView)。我正在尝试使用CAGradientLayer对其进行渐变色-代码如下 CAGradientLayer *layer = [CAGradientLayer layer]; layer.colors = [NSArray arrayWithObjects:(id)[UIColor darkGrayColor].CGColor, [UIColor lightGrayColor].CGColor, nil]

我有一个视图,其中有另一个视图(称为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方法中调用它。我看不到任何效果——我试图给它上色的视图保持不变。我做错了什么?是否有其他我应该知道的设置/订购等?

应该有效。你确定你的swipeView插座连接正确吗?调试-viewDidLoad并验证swipeView不是nil。还要仔细检查边界(layer.frame)是否合理

这应该不是必需的,但您可以尝试加入一个
[layer setNeedsDisplay]
来强制该层再次渲染,但我认为这不是您的问题

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

我不知道这是否是你遇到的问题,但我只是有着完全相同的症状,在困惑了几个小时后,我发现了我的问题:我创建了一个按钮,添加了渐变层,后来才定位按钮。最初,按钮尺寸均为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;
}

也许你正在用代码创建一个视图,而视图还没有大小或位置,所以当你添加渐变时,它也没有大小,这就是为什么你看不到它。当视图改变大小时(在
viewdilayoutsubviews
中),调整渐变层的大小,看看这是否解决了问题。

颜色数组末尾不需要零终止符


另外,我发现insertSublayer不起作用,索引为0或1。更改为简单的addSublayer成功了。

许多年后,但还是想发表评论。这正是我在使用自动布局的视图上遇到的问题。现在我正在
didlayoutsubview
中设置渐变。