Как применить CAGradientLayer в качестве маски другого CALayer?
У меня есть представление, в котором есть CALayer. Когда я создаю CAGradientLayer и применяю его как маску CALayer этого представления, ничего не происходит. Зачем?
В -initWithFrame: из представления я делаю это:
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
//[self.layer insertSublayer:gradient atIndex:0];
self.layer.mask = gradient;
Если я заменю
self.layer.mask = gradient;
с
[self.layer insertSublayer:gradient atIndex:0];
тогда я вижу градиент. Это от черного к белому.
В чем подвох?
1 ответ
Решение
Свойство mask на CALayer использует альфа- компонент слоя маски, чтобы определить, что должно быть видно, а что нет. Поскольку оба ваших цвета (черный и белый) полностью непрозрачны (нет прозрачности), маска не действует. Чтобы это исправить, вы должны изменить один из цветов на прозрачный:
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor],
(id)[[UIColor clearColor] CGColor], nil];
Это и есть "хитрость":D