【问题标题】:How to apply CAGradientLayer as mask of another CALayer?如何应用 CAGradientLayer 作为另一个 CALayer 的掩码?
【发布时间】:2012-06-04 14:35:10
【问题描述】:

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

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

有什么诀窍?

【问题讨论】:

  • 对于其他使用渐变蒙版的人来说,如果应用于UIStackView,它将不起作用。

标签: ios core-animation calayer cagradientlayer


【解决方案1】:

CALayer 上的 mask 属性使用遮罩层的 alpha 组件来确定哪些内容应该可见,哪些不可见。由于您的两种颜色(黑色和白色)都是完全不透明的(不透明),因此蒙版无效。要解决此问题,您应该将其中一种颜色更改为清晰的颜色:

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

这就是“诀​​窍”:D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    相关资源
    最近更新 更多