简单的说,平常我们想用到给View添加圆角之类的问题,在代码中还好,都是手动加入,但是在XIB或stroyboard中相对来说,就显得比较麻烦啦,此时我们就在想,如果可以在IB中自动增加这个属性该有多好啊,而
IBInspectable
出现了,问题就有一个初步的解决了,当然已经够我们使用了。
要想达到上述的效果,直接上传代码
Swift- Extension
直接建立一个UIView的UIView+Additions,就OK了
extension UIView {
// 圆角
@IBInspectable var cornerRadius: Double {
get {
return Double(self.layer.cornerRadius)
}
set {
self.layer.cornerRadius = CGFloat(newValue)
}
}
// 边界线宽
@IBInspectable var borderWidth: Double {
get {
return Double(self.layer.borderWidth)
}
set {
self.layer.borderWidth = CGFloat(newValue)
}
}
// 边界线颜色
@IBInspectable var borderColor: UIColor? {
get {
return UIColor(CGColor: self.layer.borderColor!)
}
set {
self.layer.borderColor = newValue?.CGColor
}
}
}
Objective-C — Category
新建一个
UIView+CornerRadius
的分类,在分类的头文件中添加平时用到的一些属性,别忘了IBInspectable
关键字。
.h 文件
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface UIView (CornerRadius)
@property (nonatomic, assign) IBInspectable CGFloat cornerRadius;
@property (nonatomic, assign) IBInspectable CGFloat borderWidth;
@property (nonatomic, strong) IBInspectable UIColor *borderColor;
@end
.m 文件
#import "UIView+CornerRadius.h"
#import <objc/runtime.h>
@implementation UIView (CornerRadius)
#pragma mark - CoreRadius
- (void)setCornerRadius:(CGFloat)cornerRadius {
objc_setAssociatedObject(self, @selector(cornerRadius), @(cornerRadius), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
self.layer.cornerRadius = cornerRadius;
self.layer.masksToBounds = YES;
}
- (CGFloat)cornerRadius {
return [objc_getAssociatedObject(self, _cmd) floatValue];
}
#pragma mark - BorderWidth
- (void)setBorderWidth:(CGFloat)borderWidth {
objc_setAssociatedObject(self, @selector(borderWidth), @(borderWidth), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
self.layer.borderWidth = borderWidth;
self.layer.masksToBounds = YES;
}
- (CGFloat)borderWidth {
return [objc_getAssociatedObject(self, _cmd) floatValue];
}
#pragma mark - BoderColor
- (void)setBorderColor:(UIColor *)borderColor {
objc_setAssociatedObject(self, @selector(borderColor),borderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
self.layer.borderColor = borderColor.CGColor;
}
- (UIColor *)borderColor {
return objc_getAssociatedObject(self, _cmd);
}
@end
然后,直接运行就OK了,当然其他属性我们也可以自己根据自己的需要加入:
shadowOffset
,shadowRadius
,shadowOpacity
,shadowColor
...
为什么说这是一个初步的解决方案呢,因为设置后在我们看到的IB上不会体现出来,只有在运行后才能看到效果。