swfit关于给uivew同时加入圆角(corner)和 阴影(投影)(shadow)

984 阅读1分钟

因为swift中关于corner和shadow是互斥的。针对此情况提供2个方案。 一.直接代码编辑。 二.利用uivew扩展。

一.直接代码编辑

//配置圆角:
view1.layer.cornerRadius = 10 //圆角角度                            view1.clipsToBounds = true //进行切割
//配置阴影:
view1.layer.shadowPath = UIBezierPath(roundedRect: view1.bounds, cornerRadius: view1.layer.cornerRadius).cgPath  //配置阴影路径
view1.shadowColor = UIColor.black.cgColor //配置阴影颜色
view1.layer.shadowOpacity = 0.5 //配置阴影不透明度
view1.layer.shadowOffset = CGSize(width: 10, height: 10) //配置阴影偏移度
view1.layer.shadowRadius = 1 //配置阴影模糊半径
view1.layer.masksToBounds = false

值得注意的是配置的阴影不是那种渐隐效果,而是一种投影(3d效果)。 对于上述的view1,如果添加了image,需要在圆角配置中将view1替换成view1.imageView!

二.利用UIView扩展。 在项目中新建一个swift 并加入下列代码

import UIKit

extension UIView {
    
    @IBInspectable
    var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
        }
    }
    
    @IBInspectable
    var borderWidth: CGFloat {
        get {
            return layer.borderWidth
        }
        set {
            layer.borderWidth = newValue
        }
    }
    
    @IBInspectable
    var borderColor: UIColor? {
        get {
            if let color = layer.borderColor {
                return UIColor(cgColor: color)
            }
            return nil
        }
        set {
            if let color = newValue {
                layer.borderColor = color.cgColor
            } else {
                layer.borderColor = nil
            }
        }
    }
    
    @IBInspectable
    var shadowRadius: CGFloat {
        get {
            return layer.shadowRadius
        }
        set {
            layer.shadowRadius = newValue
        }
    }
    
    @IBInspectable
    var shadowOpacity: Float {
        get {
            return layer.shadowOpacity
        }
        set {
            layer.shadowOpacity = newValue
        }
    }
    
    @IBInspectable
    var shadowOffset: CGSize {
        get {
            return layer.shadowOffset
        }
        set {
            layer.shadowOffset = newValue
        }
    }
    
    @IBInspectable
    var shadowColor: UIColor? {
        get {
            if let color = layer.shadowColor {
                return UIColor(cgColor: color)
            }
            return nil
        }
        set {
            if let color = newValue {
                layer.shadowColor = color.cgColor
            } else {
                layer.shadowColor = nil
            }
        }
    }
}

在XCode Storyboard中的“属性”检查器中编辑相关属性 同样的对于添加了image的uivew不适用,需要在代码中重新用view1.imageView!配置他的圆角。

详细的还可以看另一篇文章:www.jianshu.com/p/05eb66387…