2012-04-19 86 views
6

我刚开始使用Xcode 4.3中的主 - 细节视图模板进行播放,并试图更改主控的背景颜色并将其设置为颜色渐变。 这里是我的尝试:iOS UITableView:使用CAGradientLayer将背景颜色设置为渐变

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框架添加到项目中。我在这里错过了什么?当发生这样的错误时,我通常应该采取什么方向(因为构建成功了,应用程序似乎已经崩溃了)?

+0

[上的UIView梯度和UILabels在iPhone上]的可能重复(http://stackoverflow.com/questions/422066/gradients-on-uiview-and-uilabels-on-iphone) – 2013-07-09 19:58:11

回答

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

来自:Gradients on UIView and UILabels On iPhone

这个代码可以帮助你的问题。

+3

好了,所以它似乎'CAGradientLayer'不能与'UIColor'数组一起使用。相反,需要一个'CGColor'数组。快速浏览文档证实了这一点。 http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CAGradientLayer_class/Reference/Reference.html – vikmalhotra 2012-04-19 09:33:06

+0

我从来没有使用过这种颜色,所以我不知道,但我试图解决您的问题 – 2012-04-19 09:38:00

+1

添加.CGColor添加到[UIColor]块的末尾。例如'[UIColor blackColor] .CGColor' – Moe 2012-12-17 04:13:13

2

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

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]; 
} 
+0

不是这只是将其他两个答案合并为一个? – paqogomez 2013-09-24 03:35:10

+0

它也会出现,你有另一个帐户,你用来upvote自己。 – paqogomez 2013-09-24 03:36:30