首页 > 解决方案 > 将蒙版设置为 CALayer 剪辑子层

问题描述

我正在开发一个图层托管视图,在其中我将图层层次结构设置为:

auto view = [NSView new];
view.layer = [CALayer new];
view.layer.masksToBounds = NO;
view.wantsLayer = YES;

然后稍后使用它,如下所示:

auto rootLayer = view.layer;
auto layer = [CALayer new];
layer.frame = CGRectMake(0, 0, 100, 100);
layer.backgroundColor = rootLayer.backgroundColor;
[rootLayer addSublayer:layer]; //and similarly adding more sublayers

这很好用,我可以看到 UI 上的所有图层。当我尝试mask对此应用 a 时出现问题rootLayer

CAShapeLayer* maskLayer = [CAShapeLayer new];
maskLayer.path = getPath();//sets a CGMutablePathRef
rootLayer.mask = maskLayer;

在此之后,没有一个子层rootLayer出现。我什至尝试frame设置maskLayerusing

rootLayer.mask.frame = CGRectMake(0, 0, rootLayer.frame.size.width, rootLayer.frame.size.height);

但无济于事。我尝试将其设置maskToBoundsNO,但默认情况下rootLayer它已经是。NO我似乎无法弄清楚这里有什么问题。设置蒙版是否会导致所有子层被剪裁?我没有在任何地方找到这个记录。从以下文档mask

一个可选层,其 alpha 通道用于屏蔽层的内容

所以我解释为它不会影响子层。

我试图将其与核心动画指南中显示的内容相关联尽管将cornerRadius(蒙版)设置为父层,但子层没有被剪裁。但我不确定在mask设置显式时是否同样适用。

标签: cocoa

解决方案


推荐阅读