Как применить CAGradientLayer в качестве маски другого CALayer?
У меня есть представление, имеющее CALayer. Когда я создаю CAGradientLayer и применяю его как маску этого CALayer представления, ничего не происходит. Почему?
In -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