美文网首页
IB_DESIGNABLE 和 IBInspectable

IB_DESIGNABLE 和 IBInspectable

作者: wpf_register | 来源:发表于2020-06-06 09:37 被阅读0次
  • IB_DESIGNABLE 让你的自定 UIView 可以在 IB 中预览。
  • IBInspectable 让你的自定义 UIView 的属性出现在 IB 中 Attributes inspector 。

缺点:

  1. 无法直接在UIViewController上面使用 IB_DESIGNABLE,只能用于UIView的子类。
  2. 渲染可能会出错,有时候比较慢。

在自定义的TestView中 加上 IB_DESIGNABLE 修饰
即可以在Xib中看到看到相应效果

IB_DESIGNABLE

IB_DESIGNABLE
@interface TestView : UIView
...
@end

下面两种方法初始化的视图都可以即时看到效果

- (void)drawRect:(CGRect)rect {

}

或Masonry布局

当从代码实例化UIView的时候,initWithFrame会执行;
当从文件加载UIView的时候,initWithCoder会执行
==========================================
==========================================

-(instancetype)initWithCoder:(NSCoder *)coder{
    if (self = [super initWithCoder:coder]) {
        [self setupView];
    }
    return self;
}

-(instancetype)initWithFrame:(CGRect)frame
{
    
    if (self = [super initWithFrame:frame]) {
        [self setupView];
    }
    return self;
}

-(void)setupView{

    self.backgroundColor = UIColor.redColor;
    //背景
    _backgroundImageView = ({
         UIImageView   *imageView   = [[UIImageView alloc]init];
               imageView.image = [UIImage imageForIBWithImageNamed:@"bg" classForBundle:[self class]];
               [self  addSubview:imageView];
               imageView;
        
    });
     //未来
     _futurelabel  =  ({
         UILabel *label = [[UILabel alloc]init];
         label.font = [UIFont systemFontOfSize:15];
         label.textColor = UIColorFromRGB(0x1ca4a4);
         label.text = @"未来";
         [self addSubview:label];
         label;
     });
   
     [self layout];
}
-(void)layout{
    
     __weak __typeof(self) weakSelf = self;
    //背景
    [self.backgroundImageView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.size.mas_equalTo(weakSelf);
        make.center.mas_equalTo(weakSelf);
    }];

    
    [_futurelabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerX.mas_equalTo(weakSelf);
        make.bottom.mas_equalTo(weakSelf.mas_centerY);
    }];
  
}

IBInspectable

在自定义的神图属性前加 IBInspectable
即可以在Xib中实时可视化地更改属性

@interface Testview : UIView

@property (nonatomic, assign) IBInspectable CGFloat cornerRadius;
@property (nonatomic, strong) IBInspectable UIImage * image;

@end

在.m文件上添加set方法,即可以实时更改

#import "Testview.h"

@implementation Testview
- (void)setCornerRadius:(CGFloat) cornerRadius {
    _cornerRadius = cornerRadius;
    self.layer.cornerRadius = cornerRadius;
    self.layer.masksToBounds = YES;
}

@end

在项目中可以作一个基类


IB_DESIGNABLE

/// Xib 自定义View时
/// 可以快速的设置圆角边线颜色宽度
///阴影
@interface EWXibView : UIView

@property (nonatomic, assign) IBInspectable UIColor * ew_layerColor;
@property (nonatomic, assign) IBInspectable CGFloat   ew_layerWidth;
@property (nonatomic, assign) IBInspectable CGFloat   ew_layerRadius;

@property (nonatomic, assign) IBInspectable CGSize    ew_shadowOffset;
@property (nonatomic, assign) IBInspectable CGFloat   ew_shadowRadius;
@property (nonatomic, assign) IBInspectable CGFloat   ew_shadowOpacity;
@property (nonatomic, assign) IBInspectable UIColor * ew_shadowColor;

@end


@implementation EWXibView

-(void)setEw_layerColor:(UIColor *)LayerColor_ {

    self.layer.borderColor = LayerColor_.CGColor;
}
- (UIColor *)ew_layerColor {
    return [UIColor colorWithCGColor:self.layer.borderColor];
}


- (void)setEw_layerWidth:(CGFloat)LayerWidth_ {
    self.layer.borderWidth = LayerWidth_;
    // 解决layer.border.width随着view的放大,会出现锯齿化的问题(iOS7.0)
    self.layer.allowsEdgeAntialiasing = YES;
}
- (CGFloat)ew_layerWidth {
    return self.layer.borderWidth;
}


- (void)setEw_layerRadius:(CGFloat)LayerRadius_ {

    self.layer.cornerRadius = LayerRadius_;
    self.layer.masksToBounds = YES;
}
- (CGFloat)ew_layerRadius {
    return self.layer.cornerRadius;
}


- (void)setEw_shadowOffset:(CGSize)ShadowOffset_ {
    self.layer.shadowOffset = ShadowOffset_;
}
- (CGSize)ew_shadowOffset {
    return self.layer.shadowOffset;
}


- (void)setEw_shadowRadius:(CGFloat)ShadowRadius_ {
    self.layer.shadowRadius = ShadowRadius_;
}
- (CGFloat)ew_shadowRadius {
    return self.layer.shadowRadius;
}


- (void)setEw_shadowOpacity:(CGFloat)ShadowOpacity_ {
    self.layer.shadowOpacity = ShadowOpacity_;
}
- (CGFloat)ew_shadowOpacity {
    return self.layer.shadowOpacity;
}

- (void)setEw_shadowColor:(UIColor *)ShadowColor_ {
    self.layer.shadowColor = ShadowColor_.CGColor;
}
- (UIColor *)ew_shadowColor {
    return [UIColor colorWithCGColor:self.layer.shadowColor];
}



@end

相关文章

网友评论

      本文标题:IB_DESIGNABLE 和 IBInspectable

      本文链接:https://www.haomeiwen.com/subject/uvmazhtx.html