给项目中所有xib添加圆角/borderColor等属性

废话不多,先上github地址,不想看啰嗦的话,直接把项目中UIView+CornerRadius分类导入到自己项目中即可,不需要其他任何操作.

使用xib+storyboard开发能够极大的提高开发效率发展到现在这点应该没有什么异议了,如果还有禁止使用这些东西的公司我觉的可以考虑辞职了......
但是有一些属性再系统默认的设置面板里面我们并不能找到,最常用的就是layer.borderWidth,layer.cornerRadius,layer.borderColor这三个属性了,之前都是手动在runtime属性里面手动添加,比如:

给项目中所有xib添加圆角/borderColor等属性_第1张图片
16.jpg

但是每次用都要加上去未免太过麻烦,于是就在想能不能有个好的方式代替这种繁琐的操作,后来发现现在oc有了新的关键字就是来做这个事情的: IBInspectable

基础版

在给你用的那个xib添加对应属性,加上IBInspectable关键字,比如:

@property (nonatomic, assign)IBInspectable CGFloat cornerRadius;

这样我们就能在面板里面直接控制圆角大小了,与此同时我们还可以加上IB_DESIGNABLE关键字,来让xib可以可视化的设置属性,所见即所得.

似乎达到了要求,但是开头那个痛点还在:每个xib都要去设置.

于是乎我又想到了通过给UIView添加一个分类来做这件事情,就有了下面的过程:

进阶版

新建一个UIView+CornerRadius的分类,在分类的头文件中添加平时用到的一些属性,别忘了IBInspectable关键字

@property (nonatomic, assign)IBInspectable CGFloat cornerRadius;
@property (nonatomic, assign)IBInspectable CGFloat borderWidth;
@property (nonatomic, strong)IBInspectable UIColor *borderColor;

由于OC的特性,分类是无法扩展属性的,所以这里我们需要手动实现其set方法与get方法:

- (CGFloat)cornerRadius
{
    return [objc_getAssociatedObject(self, @selector(cornerRadius)) floatValue];
}
- (void)setCornerRadius:(CGFloat)cornerRadius
{
    self.layer.cornerRadius = cornerRadius;
    self.layer.masksToBounds = YES;
}


- (CGFloat)borderWidth
{
    return [objc_getAssociatedObject(self, @selector(borderWidth)) floatValue];
}
- (void)setBorderWidth:(CGFloat)borderWidth
{
    self.layer.borderWidth = borderWidth;
    self.layer.masksToBounds = YES;
}


- (UIColor *)borderColor
{
    return objc_getAssociatedObject(self, @selector(borderColor));
}
- (void)setBorderColor:(UIColor *)borderColor
{
    self.layer.borderColor = borderColor.CGColor;
}

大功告成,到这里为止,我们在xib中使用UIView的子类的时候,都可以很方便的设置borderColor , borderWidth, cornerRadius了,如果有兴趣,还可以扩展更多的属性.
如图:

给项目中所有xib添加圆角/borderColor等属性_第2张图片
17.jpg
美中不足

使用了分类的话,是无法通过IB_DESIGNABLE进行实时修改实时显示的,所以只有在运行后能看到实际效果,个人猜测是使用了分类之后并不能给原类扩展属性,仅仅是添加了相应的set与get方法导致的,如果有人知道能够解决这个问题,求告知啊~~~

你可能感兴趣的:(给项目中所有xib添加圆角/borderColor等属性)