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