如何将CAGradientLayer作为另一个CALayer的掩码?

我有一个观点,有CALayer。 当我创build一个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]; 

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

有什么窍门?

CALayer上的mask属性使用遮罩层的alpha分量来确定哪些应该可见而不是。 由于你的颜色(黑色和白色)是完全不透明的(不透明),面具没有效果。 要解决这个问题,你应该改变其中一种颜色为清晰的颜色:

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

这是“诀窍”:D