我试图为彼此叠加的视图添加一个投影,视图崩溃允许其他视图中的内容被看到,在这种情况下我想保持 view.clipsToBounds
ON,这样当视图崩溃时,他们的内容被剪裁 .
这似乎让我很难为图层添加阴影,因为当我转动 clipsToBounds
时,阴影也会被剪裁 .
我一直试图操纵 view.frame
和 view.bounds
以便为帧添加一个投影,但允许边界足够大以包含它,但是我没有运气 .
这是我用来添加阴影的代码(这仅适用于 clipsToBounds
OFF,如图所示)
view.clipsToBounds = NO;
view.layer.shadowColor = [[UIColor blackColor] CGColor];
view.layer.shadowOffset = CGSizeMake(0,5);
view.layer.shadowOpacity = 0.5;
以下是应用于最轻的灰色层的阴影的屏幕截图 . 希望这能让我了解如果 clipsToBounds
为OFF,我的内容将如何重叠 .
如何为我的_3023801添加阴影并保持我的内容被剪裁?
编辑:只是想补充说我还使用了带阴影的背景图像,这确实很有效,但是我仍然想知道最好的编码解决方案 .
6 回答
试试这个:
First of all :用作
shadowPath
的UIBezierPath
至关重要 . 如果你没有't use it, you might not notice a difference at first, but the keen eye will observe a certain lag occurring during events like rotating the device and/or similar. It'进行重要的性能调整 .Regarding your issue specifically :重要的一行是
view.layer.masksToBounds = NO
. 它禁用视图's layer's子图层的剪切,这些子图层比视图的边界延伸得更远 .对于那些想知道
masksToBounds
(在图层上)和视图自己的clipToBounds
属性之间的区别是:实际上并没有 . 切换一个会影响另一个 . 只是一个不同的抽象层次 .Swift 2.2:
斯威夫特3:
Wasabii在Swift 2.3中的回答:
在Swift 3/4中:
如果您正在使用AutoLayout,请将此代码放在layoutSubviews()中 .
诀窍是正确定义视图层的
masksToBounds
属性:它应该工作 .
(Source)
您可以为UIView创建扩展,以在设计编辑器中访问这些值
您也可以从故事板为视图设置阴影
在viewWillLayoutSubviews上:
使用UIView的扩展:
用法: