iOS UITableView:使用CAGradientLayer将背景颜色指定为渐变

我刚开始玩Xcode 4.3中的主 – 细节视图模板,我试图改变主的背景颜色,并将其设置为颜色渐变。 这是我试过的:

Colors.m

#import "Colors.h" @implementation Colors + (UIColor *) navigationMenuGradientTop { return [UIColor colorWithRed:213.0f/255.0f green:91.0f/255.0f blue:92.0f/255.0f alpha:1.0f]; } + (UIColor *) navigationMenuGradientBottom { return [UIColor colorWithRed:188.0f/255.0f green:0.0f/255.0f blue:1.0f/255.0f alpha:1.0f]; } + (CAGradientLayer *) navigationMenuGradient { NSArray *colors = [NSArray arrayWithObjects:(id)self.navigationMenuGradientTop, self.navigationMenuGradientBottom, nil]; CAGradientLayer *gradientLayer = [CAGradientLayer layer]; gradientLayer.colors = colors; return gradientLayer; } @end 

MasterViewController.m

 import "Colors.h" - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; CAGradientLayer *bgLayer = [Colors navigationMenuGradient]; bgLayer.frame = tableView.bounds; [tableView.layer insertSublayer:bgLayer atIndex:0]; return cell; } 

在运行时,我得到以下错误在main Thread 1: EXC_BAD_ACCESS (code=1, address=0xxxxxxxx)

 int main(int argc, char *argv[]) { @autorelasespool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } 

我也将QuartzCore框架添加到项目中。 我在这里错过了什么? 当这样的错误发生时(因为构build成功了,应用程序似乎在这里崩溃了),我应该通常进入什么方向?

 UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)] autorelease]; CAGradientLayer *gradient = [CAGradientLayer layer]; gradient.frame = view.bounds; gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil]; [view.layer insertSublayer:gradient atIndex:0]; 

来自: UIView和UILabels在iPhone上的渐变

这段代码可以帮助你解决问题。

为了添加一个背景渐变到一个视图,我在这个链接跟着教程:

http://danielbeard.wordpress.com/2012/02/25/gradient-background-for-uiview-in-ios/

在我的情况下,我有一个UITableView,并希望梯度在后台。 当我使用链接下面的代码时,我的tableview消失了。

 -(void) ViewWillAppear:(BOOL) animated { CAGradientLayer *bgLayer = [BackgroundLayer blueGradient]; bgLayer.frame = self.view.bounds; [self.view.layer insertSublayer:bgLayer atIndex:0]; } 

在修改我的代码如下,有可能有一个背景渐变和一个tableview在同一时间。

 -(void) ViewDidAppear:(BOOL) animated { CAGradientLayer *bgLayer = [BackgroundLayer blueGradient]; bgLayer.frame = self.view.bounds; [self.tableView.layer insertSublayer:bgLayer atIndex:0]; } 

嘿检查这家伙的博客在这里。 这帮了我很多! 我按照我的要求和VOILA修改了课程!

http://danielbeard.wordpress.com/2012/02/25/gradient-background-for-uiview-in-ios/