Проблема с вашим кодом заключается в том, что вы фиксируете размер слоя здесь.
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;