筆者性懶,腹中無墨.
iOS開發(fā), xib是很好用的工具,本文只是指出其中需要注意一點(diǎn).類似控件的邊框大小等不能直接設(shè)置的屬性,我們會(huì)通過key path去設(shè)置
邊框顏色是默認(rèn)的黑色, 并不會(huì)因此改變. 我們知道邊框的顏色是UIColor的CGColor屬性, UIColor是UIKit框架中存儲(chǔ)顏色的一個(gè)重要的類, 而CGColor主要用于CoreGaphics框架之中, CGColor其實(shí)是個(gè)結(jié)構(gòu)體,而我們通常在使用的CGColor的時(shí)候使用的是它的引用類型CGColorRef, 此不多論. 通過key path這種方式設(shè)置的顏色其實(shí)是UIColor類型, 不會(huì)改變邊框的顏色, 對(duì)于這個(gè)問題可以通過代碼控制來實(shí)現(xiàn), 也可以通過擴(kuò)展分類category實(shí)現(xiàn).
OC就是新建Objective-C File,注意File Type是Category,Class是CALayer
.h中需要導(dǎo)入框架#import <UIKit/UIKit.h>,增加一個(gè)方法
- (void)setBorderColorFromUIColor:(UIColor *)color;
.m中實(shí)現(xiàn)該方法即可
- (void)setBorderColorFromUIColor:(UIColor *)color {
self.borderColor = color.CGColor;
}
對(duì)于swift項(xiàng)目,category只需要些類的延展就可以,新建Swift File, 導(dǎo)入U(xiǎn)IKit框架,寫一個(gè)CALayer的延展extension.這里需要注意的是通過key path設(shè)置屬性是利用Runtime機(jī)制
OC 中
- (void)setBorderColorFromUIColor:(UIColor *)color;
相當(dāng)于設(shè)置一個(gè) borderColorFromUIColor 的 set 的方法, 可以找個(gè)這個(gè)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 是讓這個(gè)屬性轉(zhuǎn)換到 OC Runtime 的機(jī)制.
end.