2012-04-19 14 views
6

Tôi vừa mới bắt đầu phát với mẫu Chế độ xem chi tiết chính trong Xcode 4.3 và tôi đang cố thay đổi màu nền của bản gốc và đặt màu thành màu. Đây là những gì tôi đã cố gắng:iOS UITableView: gán màu nền dưới dạng gradient sử dụng 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; 
} 

Khi chạy tôi nhận được lỗi sau đây trong 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])); 
    } 
} 

tôi cũng đã thêm khung công tác QuartzCore vào dự án . Tôi đang thiếu gì ở đây? và những gì tôi nên thường đi vào khi các lỗi như vậy xảy ra (vì xây dựng thành công, ứng dụng dường như đã bị rơi ở đây)?

+0

thể trùng lặp của [Gradients trên UIView và UILabels Trên iPhone] (http://stackoverflow.com/questions/422066/gradients-on-uiview-and-uilabels-on-iphone) –

Trả lời

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

từ: Gradients on UIView and UILabels On iPhone

mã này có thể giúp vấn đề của bạn.

+3

Ok như vậy có vẻ như 'CAGradientLayer' không hoạt động với một mảng' UIColor'. Thay vào đó một mảng 'CGColor' là cần thiết. Một cái nhìn nhanh chóng vào tài liệu xác nhận điều này. http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CAGradientLayer_class/Reference/Reference.html – vikmalhotra

+0

tôi chưa bao giờ sử dụng màu đó, vì vậy tôi không có ý tưởng, nhưng tôi đã cố gắng giải quyết vấn đề của bạn –

+1

thêm .CGColor đến cuối khối [UIColor]. ví dụ '[UIColor blackColor] .CGColor' – Moe

2

Để thêm một gradient nền cho một cái nhìn Tôi làm theo các hướng dẫn tại liên kết này:

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

Trong trường hợp của tôi, tôi đã có một UITableView và muốn gradient được trong bối cảnh. Khi tôi sử dụng mã bên dưới từ liên kết, bảng nhìn của tôi biến mất.

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

Khi sửa đổi mã của tôi như dưới đây, có thể có độ dốc nền và bảng nhìn cùng một lúc.

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

Isnt này chỉ kết hợp hai câu trả lời khác thành một? – paqogomez

+0

Nó cũng sẽ xuất hiện rằng bạn có một tài khoản khác mà bạn sử dụng để tự upvote. – paqogomez