2009-11-08 4 views
0

Я пытаюсь сделать что-то, что должно быть очень просто. Я хочу добавить градиент к одному из моих представлений. Я могу добавить его в self.view, но не в viewWithGradient. Вот код:iPhone Layer confusion

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 небольшой вид внутри моего главного окна внутри ViewController (self.view). Существует только один взгляд на этот viewWithGradient. Это UILabel, который занимает примерно половину области viewWithGradient. Он имеет прозрачный фон, но метка рисует свой текст в белом цвете. Мне нужно, чтобы градиент находился под UILabel, а не на self.view, над UILabel.

В настоящее время я подозреваю, что мои рамки могут помещать градиент на экран. Кто-нибудь видит что-то, что мне не хватает? Это похоже на самый простой способ использования CALayer, и я потратил слишком много времени на это.

+0

Вы пробовали чертово цвет фона видаWithGradient. Может быть, изменить непрозрачное свойство viewWithGradient на NO? ... только некоторые предложения. – wkw

+0

Его непрозрачность уже установлена ​​в НЕТ, а фон установлен на clearColor. Я в тупике. – mahboudz

ответ

0

Координата y вашей градиентной рамки: viewWithGradient.frame.origin.y. Вы действительно хотели 0? Если viewWithGradient больше, чем на полпути вниз, ваш градиент будет рисовать за кадром.

+0

Да! Я действительно хотел его вертикально в той же точке, что и мой viewWithGradient. Я забыл, что, поскольку я добавляю этот слой к этому представлению, кадр должен быть относительно этого вида, а не всего экрана. Благодаря! – mahboudz