iOS了解图层蒙版

时间:2014-07-22 18:54:14

标签: ios objective-c uiview calayer

我在理解层掩蔽如何工作方面遇到了一些困难。现在,我有一个带UILabels的UIView。我想象两层 - 一层是背面的UIView,另一层是顶部的标签。如果我屏蔽UIView图层,标签也会受到蒙版的影响。

UILabels是父UIView的孩子,所以我也能理解影响孩子的父面具。

但是,当我从图层来看它时,它似乎没有意义。为什么屏蔽最深层会影响最重要的层?

2 个答案:

答案 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以空白画布开始。它将自己绘制到画布中,然后让孩子们将自己画入画布。当孩子们画画时,他们受到父母施加的限制,例如:裁剪和掩蔽。