Градиент исчезает в конце укороченного слова - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь получить результат, подобный следующему:
enter image description here

И я не могу понять, это код, который у меня есть:

if (size.width > self.name.bounds.size.width) {
    CAGradientLayer *l = [CAGradientLayer layer];
    CGRect myFrame = self.name.bounds;
    myFrame.size.width = 10.0f;
    l.frame = myFrame;
    l.colors = @[(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor];
    l.startPoint = CGPointMake(0.0f, 0.0f);
    l.endPoint = CGPointMake(1.0f, 0.0f);
    self.name.layer.mask = l;
}

Что я сейчас получаю, это:
enter image description here

Любая помощь?

1 Ответ

0 голосов
/ 21 августа 2019

Проблема с вашим кодом заключается в том, что вы фиксируете размер слоя здесь.

myFrame.size.width = 10.0f;

Приведенная выше строка фиксирует размер кадра до 10 пикселей.Так что размер слоя будет 10 пикселей.И слой может отображаться только на этой ширине.

Просто прокомментируйте или удалите вышеуказанную строку, чтобы получить желаемый результат.

Так что ваш код теперь будет выглядеть как

CAGradientLayer *l = [CAGradientLayer layer];
CGRect myFrame = self.name.bounds;
//    myFrame.size.width = 10.0f;
l.frame = myFrame;
l.colors = @[(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor];
l.startPoint = CGPointMake(0.0f, 0.0f);
l.endPoint = CGPointMake(1.0f, 0.0f);
self.name.layer.mask = l;

Для бонуса - Вы можете сделать этот эффект более плавным, добавив больше цветов в массив и изменив startPoint и endPoint слоя.

CAGradientLayer *l = [CAGradientLayer layer];
CGRect myFrame = self.name.bounds;
l.frame = myFrame;
l.colors = @[(id)[UIColor lightGrayColor].CGColor, (id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor];
l.startPoint = CGPointMake(0.0, 0.5);
l.endPoint = CGPointMake(1.0, 0.5);
self.name.layer.mask = l;
...