Подтвердить что ты не робот

Как применить 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];

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

Какой трюк?

4b9b3361

Ответ 1

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

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

То, что "трюк": D