筆者性懶,腹中無墨.
iOS開發(fā), xib是很好用的工具,本文只是指出其中需要注意一點.類似控件的邊框大小等不能直接設(shè)置的屬性,我們會通過key path去設(shè)置

keypath.png
邊框顏色是默認的黑色, 并不會因此改變. 我們知道邊框的顏色是UIColor的CGColor屬性, UIColor是UIKit框架中存儲顏色的一個重要的類, 而CGColor主要用于CoreGaphics框架之中, CGColor其實是個結(jié)構(gòu)體,而我們通常在使用的CGColor的時候使用的是它的引用類型CGColorRef, 此不多論. 通過key path這種方式設(shè)置的顏色其實是UIColor類型, 不會改變邊框的顏色, 對于這個問題可以通過代碼控制來實現(xiàn), 也可以通過擴展分類category實現(xiàn).
OC就是新建Objective-C File,注意File Type是Category,Class是CALayer

OC-Category.png
.h中需要導(dǎo)入框架#import <UIKit/UIKit.h>,增加一個方法
- (void)setBorderColorFromUIColor:(UIColor *)color;
.m中實現(xiàn)該方法即可
- (void)setBorderColorFromUIColor:(UIColor *)color {
self.borderColor = color.CGColor;
}
對于swift項目,category只需要些類的延展就可以,新建Swift File, 導(dǎo)入UIKit框架,寫一個CALayer的延展extension.這里需要注意的是通過key path設(shè)置屬性是利用Runtime機制

keypath-的Runtime機制.png
OC 中
- (void)setBorderColorFromUIColor:(UIColor *)color;
相當(dāng)于設(shè)置一個 borderColorFromUIColor 的 set 的方法, 可以找個這個keyPath.而swift中若也是這樣寫
func setBorderColorFromUIColor(color: UIColor){
self.borderColor = color.cgColor
}
只是單純的swift方法,不是添加屬性.所以swift中應(yīng)該這樣添加屬性
import UIKit
extension CALayer {
@objc var borderColorFromUIColor: UIColor {
set {
self.borderColor = newValue.cgColor
}
get {
return UIColor.clear
}
}
}
@objc 是讓這個屬性轉(zhuǎn)換到 OC Runtime 的機制.
end.