如何将CAGradientLayer应用为另一个CALayer的蒙版?

21

我有一个视图,其中包含一个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;

If I replace

self.layer.mask = gradient;

使用:
[self.layer insertSublayer:gradient atIndex:0];

然后我看到了渐变。它从黑色到白色。

诀窍是什么?


对于那些在渐变遮罩方面遇到困难的人,如果应用于 UIStackView 上,它将无法工作。 - Iulian Onofrei
1个回答

37

在 CALayer 上使用 mask 属性时,会使用遮罩层的 alpha 组件来确定哪些内容应该是可见的,哪些不应该。由于你的两个颜色(黑色和白色)都是完全不透明的(没有透明度),所以遮罩没有效果。为了修复这个问题,你应该将其中一个颜色更改为透明色:

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

这就是“诀窍” :D


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接