2012-04-19 14 views
6

Właśnie zacząłem grać z szablonem widoku szczegółów głównych w Xcode 4.3 i próbuję zmienić kolor tła wzorca i ustawić go na gradient koloru. Oto, co starałem:iOS UITableView: przypisywanie koloru tła jako gradientu przy użyciu 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; 
} 

Po uruchomieniu pojawia się następujący błąd w 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])); 
    } 
} 

I dodaliśmy do projektu również strukturę QuartzCore . Czego tu mi brakuje? i w jakim kierunku powinienem ogólnie wejść, gdy takie błędy wystąpią (ponieważ kompilacja się powiodła, aplikacja wydaje się tu rozbić)?

+0

możliwe duplikat [pochyleniach na UIView i UILabels na iPhone] (http://stackoverflow.com/questions/422066/gradients-on-uiview-and-uilabels-on-iphone) –

Odpowiedz

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

od: Gradients on UIView and UILabels On iPhone

Ten kod może pomóc problemu.

+3

Ok więc wydaje że 'CAGradientLayer' nie działa z tablicą' UIColor'. Zamiast tego potrzebna jest tablica 'CGColor'. Szybkie sprawdzenie dokumentacji potwierdziło to. http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CAGradientLayer_class/Reference/Reference.html – vikmalhotra

+0

Nigdy nie używałem tego koloru, więc nie mam pojęcia, ale próbowałem rozwiązać Twój problem. –

+1

add .CGKoloruj na koniec bloku [UIColor]. np. '[UIColor blackColor] .CGColor' – Moe

2

Aby dodać gradient tło do widoku I przestrzegać samouczek na ten link:

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

W moim przypadku miałem UITableView i chciał gradient być w tło. Kiedy użyłem kodu poniżej z linku zniknął mój widok tabeli.

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

Po modyfikacji mojego kodu, jak poniżej, możliwe było posiadanie gradientu tła i widoku stołu w tym samym czasie.

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

Czy to nie jest połączenie dwóch pozostałych odpowiedzi w jedno? – paqogomez

+0

Wygląda również na to, że masz inne konto, którego używasz do przechwytywania siebie. – paqogomez

Powiązane problemy