阻止CALayer阴影影响子视图?

Rob*_*b N 24 shadow calayer uiview ios ios8

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

在此输入图像描述

...
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
    ...
}
Run Code Online (Sandbox Code Playgroud)

NKo*_*kov 73

当父视图的alpha小于1.0或没有背景颜色(即设置为清除颜色)时,会发生这种情况.在这种情况下,阴影转换为子视图.见我的答案在这里了解更多详情.

Apple Docs证明了这一点:

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

阴影

  • 是的,那个外部视图的alpha <1.0. (3认同)