Swift UIView、CALayer的类目

437 阅读1分钟

UIKit中是不能直接设置一个控件的x,y,width,height,在OC中我们可以通过添加属性绑定具体的值操作,在Swift中依然可以


extension UIView {
    
    public var x: CGFloat{
        get{
            return self.frame.origin.x
        }
        set{
            var r = self.frame
            r.origin.x = newValue
            self.frame = r
        }
    }
    
    public var y: CGFloat{
        get{
            return self.frame.origin.y
        }
        set{
            var r = self.frame
            r.origin.y = newValue
            self.frame = r
        }
    }
    
    
    public var left: CGFloat{
        
        get {
            return self.frame.origin.x
        }
        set{
            
            var r = self.frame
            r.origin.x = newValue
            self.frame = r
        }
        
    }
    
    
    public var right: CGFloat{
        
        get {
            return self.frame.origin.x + self.frame.size.width
        }
        set{
            
            var r = self.frame
            r.origin.x = newValue - r.size.width
            self.frame = r
        }
        
    }
    
    public var top: CGFloat{
        
        get {
            return self.frame.origin.y
        }
        set{
            
            var r = self.frame
            r.origin.y = newValue
            self.frame = r
        }
        
    }
    
    
    public var bottom: CGFloat{
        
        get {
            return self.frame.origin.y+self.frame.size.height
        }
        set{
            
            var r = self.frame
            r.origin.y = newValue - self.frame.size.height
            self.frame = r
        }
        
    }
    
    public var width: CGFloat{
        
        get {
            return self.frame.size.width
        }
        set{
            
            var r = self.frame
            r.size.width = newValue
            self.frame = r
        }
        
    }
    
    public var height: CGFloat{
        
        get {
            return self.frame.size.height
        }
        set{
            
            var r = self.frame
            r.size.height = newValue
            self.frame = r
        }
        
    }
    func removeAllSubviews()  {
        
        for  view in self.subviews {
            view.removeFromSuperview()
        }
        
    }
    
    func hidenAllSubviews() {
        
        for  view in self.subviews {
            
            view.isHidden = !view.isHidden
        }
        
    }
    
    
    class func viewFromXib() -> UIView {
        
        return Bundle.main.loadNibNamed(String(describing: self), owner: nil, options: nil)?.first as! UIView
    }
    
    
}

在我们使用XIB的时候会用到设置View的边框颜色和阴影,但是边框和阴影接受的是CGColor,XIB选的颜色都是UIColor,反正不能拖线用代码设置吧,那样太麻烦了,我们可以写一个CALayer的分类

extension CALayer {
    
    var borderUIColor: UIColor? {
        set {
            self.borderColor = newValue?.cgColor
        }
        
        get {
            return  UIColor.init(cgColor: self.borderColor!)
        }
    }
    var shadowUIColor: UIColor? {
        set {

            self.shadowColor = newValue?.cgColor
        }
        
        get {
            return  UIColor.init(cgColor: self.shadowColor!)
        }
    }

}

这样我们在XIB中直接可以用kvc像设置圆角那样设置边框和阴影了