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文件所做修改的效果: