笔者性懒,腹中无墨.
iOS开发, xib是很好用的工具,本文只是指出其中需要注意一点.类似控件的边框大小等不能直接设置的属性,我们会通过key path去设置
边框颜色是默认的黑色, 并不会因此改变. 我们知道边框的颜色是UIColor的CGColor属性, UIColor是UIKit框架中存储颜色的一个重要的类, 而CGColor主要用于CoreGaphics框架之中, CGColor其实是个结构体,而我们通常在使用的CGColor的时候使用的是它的引用类型CGColorRef, 此不多论. 通过key path这种方式设置的颜色其实是UIColor类型, 不会改变边框的颜色, 对于这个问题可以通过代码控制来实现, 也可以通过扩展分类category实现.
OC就是新建Objective-C File,注意File Type是Category,Class是CALayer
.h中需要导入框架#import <UIKit/UIKit.h>,增加一个方法
- (void)setBorderColorFromUIColor:(UIColor *)color;
.m中实现该方法即可
- (void)setBorderColorFromUIColor:(UIColor *)color {
self.borderColor = color.CGColor;
}
对于swift项目,category只需要些类的延展就可以,新建Swift File, 导入UIKit框架,写一个CALayer的延展extension.这里需要注意的是通过key path设置属性是利用Runtime机制
OC 中
- (void)setBorderColorFromUIColor:(UIColor *)color;
相当于设置一个 borderColorFromUIColor 的 set 的方法, 可以找个这个keyPath.而swift中若也是这样写
func setBorderColorFromUIColor(color: UIColor){
self.borderColor = color.cgColor
}
只是单纯的swift方法,不是添加属性.所以swift中应该这样添加属性
import UIKit
extension CALayer {
@objc var borderColorFromUIColor: UIColor {
set {
self.borderColor = newValue.cgColor
}
get {
return UIColor.clear
}
}
}
@objc 是让这个属性转换到 OC Runtime 的机制.
end.