2012-05-30 2 views
20

У меня есть вид, который имеет CALayer. Когда я создаю CAGradientLayer и применяю его как маску 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]; 

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

Какая уловка?

+0

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

ответ

33

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

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

Это «трюк»: D

Смежные вопросы