首页 > 技术文章 > Swift-Extensions

huangzhengguo 2018-12-12 17:23 原文

日常开发中,frame 是我们经常用到的,但是 UIKit 不允许我们直接设置 frame.origin.x frame.origin.y frame.size.wight frame.size.height。

我们只能通过下面几种方式设置frame:

1) 取出 frame 然后设置后 在设置回去

var customFrame = anyView.frame

customFrame.origin.x = 10.0

anyView.frame = customFrame

 

 

2) 新定义一个 然后整体赋值

let customFrame = CGRect(x: 0.0, y: 0.0, width: 100.0, height: 100.0)

anyView.frame = customFrame

 

在Swift中我们可以实现现有类的 Extensions(在oc中使用 Category 来实现) 来实现 anyView.frame.x = 10.0 这样的代码,这样的话就不用整体设置,代码也简洁的多了。

既然是设置 frame ,那么我们需要扩展的类就是 UIView ,Swift 中在类的前面使用 extension 关键字标记是扩展类,代码如下:

extension UIView {
    var x: CGFloat {
        get {
            return frame.origin.x
        }
        
        set {
            var tmpFrame = frame
            
            tmpFrame.origin.x = newValue
            
            frame = tmpFrame
        }
    }
    
    var y: CGFloat {
        get {
            return frame.origin.y
        }
        
        set {
            var tmpFrame = frame
            
            tmpFrame.origin.y = newValue
            
            frame = tmpFrame
        }
    }
    
    var height: CGFloat {
        get {
            return frame.size.height
        }
        
        set {
            var tmpFrame = frame
            
            tmpFrame.size.height = newValue
            
            frame = tmpFrame
        }
    }
    
    var width: CGFloat {
        get {
            return frame.size.width
        }
        
        set {
            var tmpFrame = frame
            
            tmpFrame.size.width = newValue
            
            frame = tmpFrame
        }
    }
}

 

看代码其实很简单,只是把一些需要的操作封装在扩展类中了。

 

推荐阅读