在多个UIViews后面留下阴影

时间:2018-05-27 06:47:02

标签: ios swift uikit

在此视图中

this

有多个子视图。现在,我将视图配置为删除阴影,如屏幕截图所示:视图也将阴影放在其他视图上。您是否看到了一种方法可以轻松地将阴影隐藏在所有视图背后?所以所有阴影的z指数<所有观点的z-index。

我已经尝试为每个框创建一个额外的视图,并将所有这些阴影视图放在所有框后面。这种作品。但是使用PanGesture移动盒子时很缺乏。此设计看起来也很混乱。目前,每个盒子都有一个UIView,这是一个清晰的设计。

3 个答案:

答案 0 :(得分:0)

嘿Chris,试试这个

yourView.layer.shadowColor = UIColor(white: 0.0, alpha: 0.5).CGColor
yourView.layer.shadowOffset = CGSizeMake(0.0, 0.0)
yourView.layer.shadowOpacity = 1.0
yourView.layer.shadowRadius = 6.0 //increase the width & height of shadow

答案 1 :(得分:0)

您可以先添加带阴影的视图,然后在其上方添加实际视图。或者,您可以在设置阴影后尝试更改所有视图的zPosition layer

答案 2 :(得分:0)

您正在考虑解决方案错误。但用你自己的话来说,“所有观点背后”就是答案。

正如您所注意到的,由于每个视图都是z-index,因此对每个视图应用阴影会产生重叠阴影。

您提到为每个框创建一个附加视图,该视图与另一个解决方案相近但不完全相同。您可以创建单个容器视图,并将所有框放在此一个容器视图中。然后将阴影应用于容器视图。这会给你你的结果,但会有糟糕的表现!每次调用layoutSubviews时,例如视图框更改时,都会重新计算阴影。正如您所提到的,您正在使用平移手势,因此稍微移动一个框会将子视图布局几十次。

您应该使用的解决方案是创建2个容器视图,这些视图是兄弟视图。对于您创建的每个彩色视图,将其添加到顶部容器视图并创建另一个将添加到底部容器视图的视图,我们将其称为阴影容器视图。对阴影容器内部的视图使用约束,使其顶部,前导,底部和尾部等于顶部容器视图中的等效视图。接下来为阴影容器视图内的视图添加阴影,并确保应用layer.shadowPath!此阴影路径是防止在平移时重新绘制阴影的关键。

如果你不理解并需要一个例子让我知道,我会给你一个。