当背景颜色为透明色时,阴影不显示

Muk*_*nda 27 calayer ios

我在我的xib中创建了一个uiview,背景颜色为清晰的颜色.当我在视图图层上应用阴影时,阴影不会出现.但是当我设置除了清晰颜色之外的背景颜色时,阴影就会显示出来.请帮忙.

这是我的代码

self.cView.layer.shadowColor=[UIColor whiteColor].CGColor;
self.cView.layer.shadowOffset=CGSizeZero;
self.cView.layer.shadowRadius=30.0;
self.cView.layer.shadowOpacity=1.0;
self.cView.layer.cornerRadius=10.0;
Run Code Online (Sandbox Code Playgroud)

Rok*_*arc 29

问题是,阴影实际上考虑了"上层".如果它上面没有任何东西就没有阴影:阴影如何工作的

编辑:

从粘贴箱中复制了此配方

view.layer.shadowColor = [UIColor colorWithWhite:.5 alpha:1].CGColor;
view.layer.shadowRadius = 4.0f;
view.layer.shadowPath = CGPathCreateWithRect(CGRectMake(0, 0, 50, 50), NULL);
view.layer.shadowOpacity = 1.0f;
view.layer.shadowOffset = CGSizeMake(1, 1);
Run Code Online (Sandbox Code Playgroud)

但是我怀疑这对你有什么用处:结果是一个"画"的视图,它带有阴影的颜色和周围的阴影.


Dem*_*ese 7

如果指定shadowPath属性

shadowView.layer.shadowPath =
  UIBezierPath(
   roundedRect: shadowView.bounds,
   cornerRadius: 10).cgPath
Run Code Online (Sandbox Code Playgroud)

(或者需要任何拐角半径。)

即使使用.clear backgroundColor也可以使用。

请注意,您当然必须在layoutSubviews相关视图中执行此操作。

这是一个实际的完整工作示例:

import UIKit

@IBDesignable class LonelyShadow: UIView {

    let corner: CGFloat = 20

    override init(frame: CGRect) {
        super.init(frame: frame)
        common()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        common()
    }

    private func common() {

        backgroundColor = .clear
        clipsToBounds = false

        layer.shadowColor = UIColor.yourColor.cgColor
        layer.shadowOffset = CGSize(width: 0, height: 25)
        layer.shadowOpacity = 0.3
        layer.shadowRadius = 40
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        layer.shadowPath = UIBezierPath(
          roundedRect: bounds, cornerRadius: corner).cgPath
    }
}
Run Code Online (Sandbox Code Playgroud)