標籤:ios inspectabl designable 動態重新整理 ib
原創Blog,轉載請註明出處
blog.csdn.net/hello_hwc
歡迎關注我的iOS-SDK詳解專欄,在這裡你能找到很多iOS開發基礎的文章
http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html
前言:
在做應用的UI設計的時候,如果屬效能夠在Interface Builder的圖形化介面進行設定,並且動態預覽到效果,那樣無疑會大大提高應用的開發效率。而XCode為我們提供了這樣的一種方式,就是使用IBInspectable和IB_DESIGNABLE
User Defined Rumtime Attributes
通過User Defined Rumtime Attributes可以在Interface Builder中,設定一些KVC屬性的值。例如
設定圓角為50
這樣,在運行模擬器,會有如下效果
不過,這樣做有明顯的弊端
不容易調試和後期維護
IB_DESIGNABLE
IB_DESIGNABLE的宏的功能就是讓XCode動態渲染出該類圖形化介面。
使用方式,把該宏加在自訂類的前面
#import <UIKit/UIKit.h>IB_DESIGNABLE@interface IBDesigbableImageview : UIImageView@end
然後,再設定imageview為繼承類,並且設定圓角
可以看到,storyboard上的imageview動態重新整理了
IBInspectable
讓支援KVC的屬效能夠在Attribute Inspector中配置。
不熟悉KVC的童鞋可以看看我這篇文章
ios SDK詳解之KVC
添加屬性以及Set方法即可,如果是現有類,使用Category
例如為imageView的繼承類設定cornerRadius
標頭檔添加屬性
@property (nonatomic) IBInspectable CGFloat cornerRadius;
.m檔案實現對應set的方法
-(void)setCornerRadius:(CGFloat)cornerRadius{ _cornerRadius = cornerRadius; self.layer.cornerRadius = cornerRadius; self.layer.masksToBounds = cornerRadius > 0?true:false;}
這樣,在Attribute Inspector就會多出一個配置選項
通過設定這個選項,就可以設定layer的圓角了。
每次設定圓角,都會在Identity Inspector中改變一個rumtime的KVC變數
不過,現在仍然不能動態重新整理
通過IB_DESIGNABLE配合IBInspectable可以實現動態重新整理
實現方式很簡單,就是在自訂類的標頭檔處加上這個宏定義即可。然後把對應的類設定為自訂的類。
.h檔案
#import <UIKit/UIKit.h>IB_DESIGNABLE@interface IBDesigbableImageview : UIImageView@property (nonatomic) IBInspectable CGFloat cornerRadius;@end
.m檔案
#import "IBDesigbableImageview.h"@implementation IBDesigbableImageview-(void)setCornerRadius:(CGFloat)cornerRadius{ _cornerRadius = cornerRadius; self.layer.cornerRadius = cornerRadius; self.layer.masksToBounds = cornerRadius > 0?true:false;}@end
效果就是最開始的Demo
如果不能動態重新整理,重啟XCode,如果還不能重新整理,如RefreshingAllViews,建議開啟Automatically Refresh Views
官網關於這部分的連結
https://developer.apple.com/library/ios/recipes/xcode_help-IB_objects_media/Chapters/CreatingaLiveViewofaCustomObject.html
我的Github這個項目的連結,歡迎關注這個項目
https://github.com/wenchenhuang/IBInspectableAndIBDesignableDemo
CSDN上傳的資源暫時沒有更新,要原始碼的童鞋直接去GitHub下載
iOS SDK詳解之IBInspectable和IB_DESIGNABLE-Storyboad動態重新整理