曾經(jīng)想實現(xiàn)自定義的View,可以想系統(tǒng)自帶那樣擁有屬性,并且實時渲染,動態(tài)更新內(nèi)容,現(xiàn)在在Xcode6終于讓你可以輕松的做到。
你不用編譯就能實時預(yù)覽,現(xiàn)在配置自定義界面方便多了,IBInspectable和IBDesignable使它成為可能。
IBInspectable
IBInspectable屬性提供訪問舊功能的新方法:用戶自定義的運行時屬性。從目前的身份檢查器(identity inspector)中訪問,這些屬性在Interface Builder整合到Xcode??梢酝ㄟ^它來配置Nib,Xib,storyboard實例中的任何鍵值編碼(key-value-coded)屬性:

以前想實現(xiàn),只能點+號手動添加例如想給UIView添加一個圓角半徑,設(shè)置Key Path 為:layer.cornerRadius,
type為Number ,Value為4,如果使用IBInspectable只需要在@property 聲明后加上IBInspectable(或者swift 加上@IBInspectable),就可以在IB的觀察面板中(inspector pannel)里直接編輯。其他交由Xcode自動完成,屬性名字會自動分組,名稱從駝峰(camel-)轉(zhuǎn)換成 title-模式。

目前可檢查屬性支持

備注
1.經(jīng)本人親測,除NSNumber,NSRange不會產(chǎn)生觀察面板屬性,NSRange不會在runtime Attributes 中自動添加,其他都會自動生成。
2.支持顏色類型UIColor但是不支持CALayer的CGColor,設(shè)置顏色時只需設(shè)置UIColor,不要要設(shè)置CGColor,系統(tǒng)會自動將UIColor轉(zhuǎn)換,例如設(shè)置borderColor。
IBDesignable
當(dāng)你應(yīng)用到UIView或者UIView的子類中的時候,只需加上IBDesignable,就可以讓IB在畫布上實時渲染視圖。當(dāng)你更新屬性后,視圖會自動更新不需要重新運行程序。
標(biāo)記一個自定義視圖為IBDesignable,只需要在類名前面加上IB_DESIGNABLE(swift里加上@IBDesignable)。你的初始化,布置和繪制方法都將用來在畫布上渲染你的自定義視圖:
IB_DESIGNABLE
@interface CustomView :UIView {
@property (nonatomic, strong) IBInspectable UIColor *borderColor;
@property (nonatomic, assign) IBInspectable CGFloat borderWidth;
...
}
@end
實時效果:

有了這個功能,一個設(shè)計師或者開放人員可以輕松調(diào)整自定義的控件呈現(xiàn)。任何改變,都將立即呈現(xiàn),有的想swift里面的playground功能,實現(xiàn):所見即所得。
由于在 Interface Builder 中呈現(xiàn)自定義視圖不會有應(yīng)用程序的完整上下文,你可能需要生成模擬數(shù)據(jù)以便顯示,例如一個默認用戶頭像圖片或仿制的天氣數(shù)據(jù)。有兩種方法可以為這個特殊的上下文添加代碼:
1.prepareForInterfaceBuilder() :此方法與你代碼的其余部分一起編譯,但只有當(dāng)視圖正在準(zhǔn)備在Interface Builder顯示時執(zhí)行.
2.TARGET_INTERFACE_BUILDER:#if TARGET_INTERFACE_BUILDER預(yù)處理宏在 Objective-C 或 Swift 下都是工作的,它會視情況編譯正確代碼:
#if !TARGET_INTERFACE_BUILDER
? ?// this code will run in the app itself
#else
? ?// this code will execute only in IB
#endif
參考資料
http://nshipster.cn/ibinspectable-ibdesignable/
Demo地址