前言
在做應用的UI設計的時候门烂,在xib或者SB開發(fā)中為我們提供了方便的可視化Interface Builder的圖形化界面進行設置宙枷,并且動態(tài)的預覽到效果钙畔,那樣無疑會大大提高應用的開發(fā)效率。UI元素的常用屬性在面板上基本都能看到仗岖,方便設置逃延。但是畢竟會有漏網之魚,比如最常用的UIImageView的圓角設置轧拄,就沒有直接的設置選項揽祥。最近在學習Storyboard使用技巧的時候了解了下IBInspectable和IB_DESIGNABLE,接下來就和大家分享一下檩电。
之前的做法
- 在代碼處理
self.view.layer.cornerRadius = xxx;
self.view.layer.maskToBounds = YES;
-
面板中設置一些KVC屬性的值
屏幕快照 2017-05-09 下午11.34.44.png
但是這樣還是不能在視圖中看到變化拄丰,不能實時刷新。
IB_DESIGNABLE
IB_DESIGNABLE的宏的功能就是讓XCode動態(tài)渲染出該類圖形化界面俐末。
- 我這里的做法是繼承了UIView料按,在子類.h文件中引入宏定義
#import <UIKit/UIKit.h>
///引入宏定義
IB_DESIGNABLE
@interface TestView : UIView
@end
-
然后在項目中所有的UIView都class都設置為繼承的子類。
2.png -
最后再同之前一樣卓箫,在面板上設置圓角载矿,就發(fā)現可以動態(tài)刷新啦。
3.gif
IB_DESIGNABLE和IBInspectable的配合使用
如果你覺得通過面板中的User Defined Rumtime Attributes來設置太麻煩了烹卒。那么你該考慮使用IBInspectable特性了闷盔。
- 自定義一個圓角屬性
///自定的圓角屬性
@property (nonatomic, assign) IBInspectable CGFloat myCorner; - 重寫set方法
- (void)setMyCorner:(CGFloat)myCorner {
_myCorner = myCorner;
self.layer.cornerRadius = _myCorner;
self.layer.masksToBounds = YES;
}
然后你會驚奇的發(fā)現在面板上,多了一個myCorner屬性選項旅急,并且可以動態(tài)設置和刷新狀態(tài)逢勾,是不是很炫酷呢?
4.gif
如果不能動態(tài)刷新藐吮,重啟XCode溺拱,如果還不能刷新,請開啟Editor -> Automatically Refresh Views。
最后
- IBInspectable當然不僅限于設置圓角炎码,你可與根據自己的需求來在面板上添加一些需要的屬性盟迟,并重寫set方法秋泳。不過個人建議潦闲,那些只會在初始化時設置一次,后期不會經常變化的邏輯可以這樣使用迫皱,不然的話反而顯得復雜化了歉闰。
- 我這里用的是繼承的方法辖众,當然還可以用category來實現。
- swift代碼示例在后期補上和敬。
- 以上示例親測有效凹炸,還測了一些其他屬性,這里就不貼出來啦昼弟。
by丟丟