我在理解层掩蔽如何工作方面遇到了一些困难。现在,我有一个带UILabels的UIView。我想象两层 - 一层是背面的UIView,另一层是顶部的标签。如果我屏蔽UIView图层,标签也会受到蒙版的影响。
UILabels是父UIView的孩子,所以我也能理解影响孩子的父面具。
但是,当我从图层来看它时,它似乎没有意义。为什么屏蔽最深层会影响最重要的层?
答案 0 :(得分:10)
将图层视为纸张。将视图层视为一张白纸。正如你所知,标签'图层是视图图层的子图层。想要联系,想一想标签'层是粘在大视图层板上的纸条。
我们假设您希望用圆圈遮盖图层。为了将其转化为我们的小类比,你希望用哈利波特的隐形斗篷覆盖大视图的层板,其中有一个圆形孔。
为此,您可以将隐身斗篷切割成与视图的图层相同的大小。
cloakLayer.frame = bigViewLayer.frame;
然后,你小心翼翼地从它上面切出一个圆圈。
cloakLayer.path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(0, 0) radius:15.0 startAngle:0.0 endAngle:2 * M_PI clockwise:YES];
cloakLayer.fillColor = [UIColor blackColor].CGColor; // the hole
然后,你将这个斗篷贴在你的大视图层板上,小心地对齐边缘。
bigViewLayer.mask = cloakLayer;
什么会变得隐形?纸张上的任何东西(因为披风被切成了纸张的尺寸)都不会落入你从斗篷中取出的圆圈中。这是mask
财产。
让我们谈谈masksToBounds
财产。
让我们说在将标签层板条粘贴到大视图层板上时,您决定只将一半条带放在纸张上,然后将其余部分悬挂在边缘(一个或多个)。
我们假设您将masksToBounds
设置为YES
。剪纸之神现在会做什么,整齐地剪下你的标签部分'条带不在大视图的图层边缘内。这是masksToBounds
财产。
让我们谈谈边界。这很简单。只需选择borderColor
的尖头,其笔尖为borderWidth
点宽,并仔细绘制视图的图层边缘。就是这样。
我希望你现在能够得到一些东西,并且可以为精彩的CALayer
的其他属性做出自己的类比。
答案 1 :(得分:0)
正如你所说,UIView是父母,UILabels是孩子。当需要更新屏幕时,UIView以空白画布开始。它将自己绘制到画布中,然后让孩子们将自己画入画布。当孩子们画画时,他们受到父母施加的限制,例如:裁剪和掩蔽。