cocoa - 将蒙版设置为 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
设置maskLayer
using
rootLayer.mask.frame = CGRectMake(0, 0, rootLayer.frame.size.width, rootLayer.frame.size.height);
但无济于事。我尝试将其设置maskToBounds
为NO
,但默认情况下rootLayer
它已经是。NO
我似乎无法弄清楚这里有什么问题。设置蒙版是否会导致所有子层被剪裁?我没有在任何地方找到这个记录。从以下文档mask
:
一个可选层,其 alpha 通道用于屏蔽层的内容。
所以我解释为它不会影响子层。
我试图将其与核心动画指南中显示的内容相关联,尽管将cornerRadius
(蒙版)设置为父层,但子层没有被剪裁。但我不确定在mask
设置显式时是否同样适用。
解决方案
推荐阅读
- mysql - 如何在 mongo db 中创建父子模式并检索数据
- python - 张量流概率 - MCMC - 转换内核中双射器的问题?
- youtube-api - Magento 2 youtube 视频配额超出
- json - 如何在 XQUERY Marklogic 中获取 json doc 的每个字段?
- linux - Apache 403 随处可见 XAMPP Linux
- sql - 为什么我在 Data Studio 中收到 CASE 错误?
- javascript - 使用异步 API 调用在 createContext 上设置数据
- c - 使用strtok在c中拆分字符串
- wpf - VS 2019 转到定义在 XAML WPF 中不起作用
- jquery - JQuery - 删除动态附加的表