日常开发中,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
}
}
}
看代码其实很简单,只是把一些需要的操作封装在扩展类中了。