創(chuàng)建自定義View在IB中實時渲染

曾經(jīng)想實現(xiàn)自定義的View,可以想系統(tǒng)自帶那樣擁有屬性,并且實時渲染,動態(tài)更新內(nèi)容,現(xiàn)在在Xcode6終于讓你可以輕松的做到。

你不用編譯就能實時預(yù)覽,現(xiàn)在配置自定義界面方便多了,IBInspectableIBDesignable使它成為可能。

IBInspectable

IBInspectable屬性提供訪問舊功能的新方法:用戶自定義的運行時屬性。從目前的身份檢查器(identity inspector)中訪問,這些屬性在Interface Builder整合到Xcode??梢酝ㄟ^它來配置Nib,Xib,storyboard實例中的任何鍵值編碼(key-value-coded)屬性:

runtime Attributes setting

以前想實現(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-模式。


inspector pannel

目前可檢查屬性支持

supported ?types

備注

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

實時效果:


custom view


有了這個功能,一個設(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/

Apple 官方介紹

Demo地址

IBInspectable_IBDesignable_Demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容