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像设置圆角那样设置边框和阴影了