实现 Zeplin 中的 Shadows

475 阅读1分钟

Zeplin 中的阴影值如题图一样,用代码实现如下:

添加如下扩展:

CALayer 的 masksToBounds 需要设置为 false,默认值就是 false,即不用设置,否则阴影看不出来

extension CALayer {
    func setShadow(color: UIColor, alpha: CGFloat, x: CGFloat, y: CGFloat, blur: CGFloat, spread: CGFloat) {
        shadowOffset = CGSize(width: x, height: y)
        shadowRadius = blur * 0.5
        shadowColor = color.cgColor
        shadowOpacity = Float(alpha)

        let rect = bounds.insetBy(dx: -spread, dy: -spread)
        let path = UIBezierPath(roundedRect: rect, cornerRadius: cornerRadius)
        shadowPath = path.cgPath
    }
}

使用示例:

layer.setShadow(color: UIColor.red, alpha: 0.3, x: 0, y: 12, blur: 20, spread: -8)