Вопрос по ios – Как применить CAGradientLayer в качестве маски другого CALayer?

20

У меня есть представление, в котором есть 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];

тогда я вижу градиент. Это от черного до белого.

Какой трюк?

Для других, которые борются с градиентной маской, это не будет работать, если применить кUIStackView. Iulian Onofrei

Ваш Ответ

1   ответ
36

alpha компонент маскирующего слоя для определения того, что должно быть видно, а что нет. Поскольку оба ваших цвета (черный и белый) полностью непрозрачны (нет прозрачности), маска не имеет никакого эффекта. Чтобы это исправить, вы должны изменить один из цветов на прозрачный:

gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], 
                                            (id)[[UIColor clearColor] CGColor], nil];

Это и есть "трюк" : D

Похожие вопросы