UILabel добавить GradientLayer

Чтобы добавить фоновый градиент к UILabel, я использую следующий код.

Перед использованием градиента UILabel выглядит так.

Без градиента

Теперь, чтобы добавить градиент, я использую следующий код.

   CAGradientLayer *gradLayer=[CAGradientLayer layer];
    gradLayer.frame=self.myView.layer.bounds;
    [gradLayer setColors:[NSArray arrayWithObjects:(id)([UIColor redColor].CGColor), (id)([UIColor cyanColor].CGColor),nil]];
    gradLayer.endPoint=CGPointMake(1.0, 0.0);

    [self.myView.layer addSublayer:gradLayer];

Тогда UILabel выглядит следующим образом, но без текста.

С градиентом

Я также пытаюсь добавить слой внизу слоя UILabel, но безуспешно.

[self.myView.layer insertSublayer:gradLayer atIndex:0];

person weber67    schedule 11.05.2013    source источник
comment
Попробуйте добавить градиент в представление, а затем добавить метку в качестве подпредставления этого представления. если вы установите цвет метки на [UIColor clearColor], градиент и текст должны отображаться.   -  person kmikael    schedule 11.05.2013
comment
Итак, вы хотите сказать, что нельзя установить градиент для UILabel. Тогда, по вашему мнению, мне придется без необходимости добавить UIView, установить его градиент, а затем добавить UILabel. Хорошо, но введение объекта увеличит объем памяти, если нужно добавить много UILabel.   -  person weber67    schedule 11.05.2013
comment
Я не думаю, что один дополнительный простой UIView на UILabel так сильно повлияет на память.   -  person kmikael    schedule 11.05.2013


Ответы (1)


Вместо этого вам, вероятно, потребуется установить метку поверх другого UIView:

 UIView *labelBackground = [[UIView alloc] initWithFrame:self.label.frame];
 self.label.backgroundColor = [UIColor clearColor];
 self.label.frame = self.label.bounds;

 CAGradientLayer *gradLayer=[CAGradientLayer layer];
 gradLayer.frame = labelBackground.layer.bounds;
 [gradLayer setColors:[NSArray arrayWithObjects:(id)([UIColor redColor].CGColor), (id)([UIColor cyanColor].CGColor),nil]];
 gradLayer.endPoint=CGPointMake(1.0, 0.0);

 [labelBackground.layer addSublayer:gradLayer];

 [labelBackground addSubview:self.label];

 [self.view addSubview:labelBackground];
person Undo    schedule 11.05.2013