阻止CALayer阴影影响子视图?

时间:2015-07-01 19:37:11

标签: ios uiview ios8 calayer shadow

我有一个自定义UIControl,我希望它有一个阴影,所以我在其layer上设置相关属性。根据需要在视图周围显示阴影,但在UILabel的文本下也会出现阴影,这是一个子视图。你怎么阻止这个?我只想要外围超视图周围的阴影。

enter image description here

...
init() {        
    label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    self.translatesAutoresizingMaskIntoConstraints = false
    addSubview(label)

    self.layer.masksToBounds = false
    self.layer.shadowColor = UIColor.blackColor().CGColor
    self.layer.shadowOpacity = 1.0
    self.layer.shadowRadius = 2.0

    // Adding these lines trying to explicitly stop shadow on label...
    label.layer.shadowOpacity = 0
    label.layer.shadowColor = nil
    ...
}

2 个答案:

答案 0 :(得分:68)

当父视图的alpha小于1.0或没有背景颜色(即设置为清除颜色)时,会发生这种情况。在这种情况下,阴影转换为子视图。有关详细信息,请参阅我的回答here

Apple Docs证明了这一点:

  

图A-7显示了同一样本层的几个不同版本   应用了红色阴影。左侧和中间版本包括a   背景颜色所以阴影只出现在边框周围   层。但是,右侧的版本不包含背景   颜色。在这种情况下,阴影应用于图层的内容,   边框和子图层。

Shadow

答案 1 :(得分:0)

很容易,只需更改您的子视图父级即可。

换句话说,在透明阴影视图上方创建新的父视图,并将子视图插入此新的父视图。