xib和storyBoard在開發時給我們提供了很大的方便, 我們不但能在上面設置界面相關的屬性,以及部分類的設置。
在開發時,我們很多時候都是實用代碼對控件的layer層進行設置和修改,如果子類控件多了,每個都需要設置是不是很麻煩呢? 那麼, 我們能不能向對view一樣在xib上或者storyBoard上直接就能對layer進行相關設置呢? 答案當然是肯定的。 我們有兩種方法可以實現對layer的設置和修改。下面我們就來看看, 在xib和storyBoard上怎麼進行Layer相關的設置。
1. 首先看看第一種, 直接在Xcode上配置layer的屬性。
1). 首先打開Xcode,選中相應的控件(修改的控件)
2).打開屬性面板,找到右邊第三個檢查起 Identity Inspector (標識符檢查器, 也叫身份檢查器)
3).在這個檢查器中, 找到User Defined Runtime Attributes這個地方, 就可以在這個地方添加layer屬性相對應的值 。 如下圖:
設置好以上代碼, 運行項目看一下, 控件的相關外觀就按照我們所設置和期望的那樣, 被進行了修改, 看起來和用起來都很簡單吧。我們也不用書寫一大堆代碼去設置。
2. 第二種方法, 第二種方法雖然較第一種方法比較麻煩, 但更直觀一些, 可以像設置控件顏色一樣進行設置。 我們需要用到設置xib和storyBoard界面元素的宏以及屬性申明方式。
1). 首先我們創建一個類, 是UIView的擴展類, 這裏我就用 YSView, 在自定義類的.h文件中, 我們需要聲明相對應的屬性, 並使用IB_DESIGNABLE宏標記可顯示在interface中並動態刷新。
#import <UIKit/UIKit.h>
#import "UIView+YSView.h"
//在定義類的前面加上IB_DESIGNABLE宏
/**
* 這個宏定義的作用是可以通過keypath動態看到效果,實時性,不過還是需要通過在keypath中輸入相關屬性來設置
*/
IB_DESIGNABLE //動態刷新
@interface UIView (YSView)
//注意:加上IBInspectable就可以可視化顯示相關的屬性
/**
* 可視化設置邊框寬度
*/
@property (nonatomic,assign)IBInspectable CGFloat borderWidth;
/**
* 可視化設置邊框顏色
*/
@property (nonatomic,strong)IBInspectable UIColor *borderColor;
/**
* 可視化設置圓角
*/
@property (nonatomic,assign)IBInspectable CGFloat cornerRadius;
以上我們只定義三個常用屬性,其他屬性如果感興趣的話,可以自己試着添加並使用。
2).在.m文件中,我們使用set方法,將屬性的獲得的值,賦值給view的layer的相對應的屬性, 這樣就完成了對控件layer的修改。
/**
* 設置邊框寬度
*
*/
- (void)setBorderWidth:(CGFloat)borderWidth
{
if(borderWidth <0) return;
self.layer.borderWidth = borderWidth;
}
/**
* 設置邊框顏色
*/
- (void)setBorderColor:(UIColor *)borderColor
{
self.layer.borderColor = borderColor.CGColor;
}
/**
* 設置圓角
*/
- (void)setCornerRadius:(CGFloat)cornerRadius
{
self.layer.cornerRadius = cornerRadius;
self.layer.masksToBounds = cornerRadius >0;
}
最後, 我們來看看上述代碼對xib文件或storyBoard文件所做修改的效果: