2012-04-19 8 views
6

Ich habe gerade mit der Master-Detail-Ansichtsvorlage in Xcode 4.3 begonnen und versuche, die Hintergrundfarbe des Masters zu ändern und auf einen Farbverlauf einzustellen. Hier ist, was ich versucht:iOS UITableView: Hintergrundfarbe als Farbverlauf mit CAGradiantLayer zuweisen

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

Beim Laufen ich die folgende Fehlermeldung in 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 habe das QuartzCore-Framework ebenfalls zum Projekt hinzugefügt . Was vermisse ich hier drüben? und in welche Richtung sollte ich generell gehen, wenn solche Fehler auftreten (weil der Build erfolgreich war, scheint die App hier abgestürzt zu sein)?

+0

möglich Duplikat [Gradients auf UIView und UILabels auf iPhone] (http://stackoverflow.com/questions/422066/gradients-on-uiview-and-uilabels-on-iphone) –

Antwort

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

aus: Gradients on UIView and UILabels On iPhone

dieser Code kann Ihr Problem helfen.

+3

Ok, so scheint es, das 'CAGradiantLayer' arbeitet nicht mit einem Array von' UIColor'. Stattdessen wird ein CGColor-Array benötigt. Ein kurzer Blick in die Dokumentation bestätigte dies. http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CAGradientLayer_class/Reference/Reference.html – vikmalhotra

+0

Ich habe nie diese Farbe verwendet, also habe ich keine Ahnung, aber ich habe versucht, Ihr Problem zu lösen –

+1

hinzufügen .CGColor bis zum Ende des [UIColor] -Blocks. zB '[UIColor blackColor] .CGColor' – Moe

2

Um einen Hintergrund Gradienten zu einer Ansicht hinzuzufügen, folgte ich das Tutorial unter diesem Link:

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

In meinem Fall hatte ich eine UITableView und wollte die Gradienten in seine der Hintergrund. Als ich den Code unten vom Link benutzte, verschwand meine Tabellenansicht.

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

Wenn ich meinen Code wie unten beschrieben ändere, war es möglich, gleichzeitig einen Hintergrundgradienten und eine Tabellenansicht zu haben.

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

Kombiniert das nicht nur die anderen beiden Antworten zu einer? – paqogomez

+0

Es scheint auch, dass Sie ein anderes Konto haben, das Sie verwenden, um sich selbst zu aktualisieren. – paqogomez