tags:

views:

242

answers:

1

I am trying to do something that should be really simple. I want to add a gradient to one of my views. I can add it to self.view, but not to viewWithGradient. Here is the code:

CAGradientLayer *gradient = [CAGradientLayer layer];

UIColor *colorFirst     = [UIColor colorWithWhite:0.10 alpha:0.15];
UIColor *colorLast   = [UIColor colorWithWhite:0.535 alpha:0.8];
NSArray *colors =  [NSArray arrayWithObjects:(id)colorFirst.CGColor, colorLast.CGColor, nil];
gradient.colors = colors;

NSNumber *stopFirst  = [NSNumber numberWithFloat:0.00];
NSNumber *stopLast  = [NSNumber numberWithFloat:1.00];
NSArray *locations = [NSArray arrayWithObjects:stopFirst, stopLast, nil];
gradient.locations = locations;
gradient.frame = CGRectMake(0.0, viewWithGradient.frame.origin.y, viewWithGradient.frame.size.width, height_of_gradient);

[self.view.layer addSublayer:gradient]; // this works.  I get a nice gradient at 
     // the bottom of the view, where I want it, 
     // but I need the gradient further down in 
     // my view hierarchy.
//  [viewWithGradient.layer addSublayer:gradient]; // this doesn't.  There
     // is no visually noticeable change
     // if this is uncommented and the
     // above line is.

viewWithGradient is a small view inside my main view inside a viewController (self.view). There is only one other view over this viewWithGradient. It is a UILabel, that only takes up about one half of the area of viewWithGradient. It has a transparent background, but the label draws its text in white. I need to have the gradient be under the UILabel, not on self.view, over the UILabel.

I currently suspect that my frame/bounds may put the gradient offscreen. Does anyone see anything that I am missing? This seems like the simplest of the CALayer usages, and I have spent way too much time on it.

A: 

The y coordinate of your gradient's frame is viewWithGradient.frame.origin.y. Did you actually want 0? If viewWithGradient is more than halfway down the screen, your gradient will draw offscreen.

Neil Mix
Yes! I actually wanted it vertically at the same point as my viewWithGradient. I forgot that since I am adding this layer to that view, the frame has to be relative to this view, not the entire screen. Thanks!
mahboudz