2013-02-15 4 views
7

Я хочу использовать градиент в качестве фона для UIView. Я знаю, что это обычно делается с изображениями и backgroundColor. Однако я хочу узнать, как это сделать в коде. Использование https://stackoverflow.com/a/1931498/99683 Я могу создать программный код UIView и дать ему слой градиента. Это отлично работает.UIView Background Gradient With Interface Builder View

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 340, 280, 100)]; 
CAGradientLayer *gradient = [CAGradientLayer layer]; 
gradient.frame = view.bounds; 
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor], (id)[[UIColor yellowColor] CGColor], nil]; 
[view.layer insertSublayer:gradient atIndex:0]; 
[self.view addSubview:view]; 

Однако, если я поместил вид в Interface Builder (с установленным фоном для очистки) и попробую то же самое, что градиент никогда не появится.

CAGradientLayer *gradient2 = [CAGradientLayer layer]; 
gradient2.frame = self.containerView.bounds; 
gradient2.colors = [NSArray arrayWithObjects:(id)[[UIColor blueColor] CGColor], (id)[[UIColor greenColor] CGColor], nil]; 
[self.containerView.layer insertSublayer:gradient2 atIndex:0]; 

Есть ли что-то еще, что мне нужно сделать в IB или код, чтобы сделать эту работу?

+2

Hi. Что такое «я» здесь? UITableViewCell? Моя лучшая рекомендация - реализовать UIView и сделать рисунок в методе drawRect :), а затем использовать этот подкласс UIView в вашем XIB, если вы хотите, чтобы это было плохо :-), но это всего лишь личная рекомендация, я не большой поклонник от IB. – Vinzius

+0

'self' является контроллером вида, а' containerView' является выходом IB для объекта 'UIView'. Да, сейчас я хочу сделать это скорее как академическое упражнение, чем что-либо еще. Мне придется попробовать подкласс и метод 'drawRect'. –

+1

Подкласс и метод 'drawRect' отлично работают для меня BTW. Спасибо @Vinzius! Все еще любопытно узнать, есть ли более простой способ сделать градиенты с просмотрами IB. :) –

ответ

3

Я столкнулся с той же проблемой, но, наконец, понял, что UIView не был создан в точке кода, где вы пытаетесь установить фоновый градиент, который, как я полагаю, в вашем случае может быть одним из следующих: viewDidLoad или - viewWillAppear из которых

self.containerView.bounds будет {{0, 0}, {0, 0}}

Вместо этого, вы должны установить градиент слой внутри

viewDidAppear

в этот момент были созданы мнения.

1

Эта библиотека поддерживает установку градиентного фона в раскадровке, используя IB_DESIGNABLE/IBInspectable.

Это действительно полезно.

https://github.com/recruit-mtl/EXTView/

Смежные вопросы