Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将CAGradientLayer应用为另一个CALayer的遮罩?_Ios_Core Animation_Calayer_Cagradientlayer - Fatal编程技术网

Ios 如何将CAGradientLayer应用为另一个CALayer的遮罩?

Ios 如何将CAGradientLayer应用为另一个CALayer的遮罩?,ios,core-animation,calayer,cagradientlayer,Ios,Core Animation,Calayer,Cagradientlayer,我有一个视图,它有一个CALayer。当我创建一个CAGradientLayer并将其应用为该视图CALayer的遮罩时,什么都没有发生。为什么? 在视图的-initWithFrame中,我执行以下操作: CAGradientLayer *gradient = [CAGradientLayer layer]; gradient.frame = self.bounds; gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackC

我有一个视图,它有一个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;

然后我看到了梯度。从黑到白


诀窍是什么?

CALayer上的mask属性使用遮罩层的alpha组件来确定哪些应该可见,哪些不应该。因为你的两种颜色(黑色和白色)都是完全不透明的(没有透明度),所以遮罩没有效果。要解决此问题,应将其中一种颜色更改为清晰的颜色:

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

这就是“诀窍”:D

对于其他难以使用渐变遮罩的人来说,如果应用于
UIStackView
,它将不起作用。
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], 
                                            (id)[[UIColor clearColor] CGColor], nil];