iOS UITableView: asigna color de background como gradiente usando CAGradientLayer

Acabo de comenzar a jugar con la plantilla de vista de detalles maestros en Xcode 4.3 y estoy tratando de cambiar el color de background del maestro y establecerlo en un degradado de color. Esto es lo que probé:

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

Al ejecutar, obtuve el siguiente error en mainThread 1: EXC_BAD_ACCESS (code=1, address=0xxxxxxxx)

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

También agregué el marco QuartzCore al proyecto. ¿Qué me falta aquí? y en qué dirección debo ir en general cuando ocurren tales errores (porque la compilation tuvo éxito, la aplicación parece haberse estrellado aquí)?

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

desde: Degradados en UIView y UILabels en iPhone

este código puede ayudar a su problema.

Para agregar un gradiente de background a una vista, seguí el tutorial en este enlace:

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

En mi caso tenía una UITableView y quería que el gradiente estuviera en segundo plano. Cuando utilicé el código a continuación del enlace, mi vista de tabla desapareció.

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

Al modificar mi código como se muestra a continuación, fue posible tener un gradiente de background y una vista de tabla al mismo time.

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

Oye, mira el blog de este chico aquí. ¡Esto me ayudó bastante! ¡Modifiqué la class según mis requisitos y VOILA!

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