[置顶] 在xib和storyBoard上设置layer属性的两种方法

时间:2022-03-05 19:30:55


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属性相对应的值 。 如下图:

[置顶]        在xib和storyBoard上设置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文件所做修改的效果:

[置顶]        在xib和storyBoard上设置layer属性的两种方法