美文网首页程序员
用于storyboard开发 很方便的UIView分类

用于storyboard开发 很方便的UIView分类

作者: 莱姆船长 | 来源:发表于2018-05-08 15:22 被阅读0次

    .h 文件

    #import <UIKit/UIKit.h>
    
    @interface UIView (LGFGSView)
    
    #pragma mark - 控件唯一名字(通常用于确定某一个特殊的view)
    
    @property (copy, nonatomic) IBInspectable NSString *lgf_ViewName;
    
    #pragma mark - 圆角
    
    @property (assign , nonatomic) IBInspectable CGFloat lgf_CornerRadius;
    
    #pragma mark - 边框颜色
    
    @property (strong , nonatomic) IBInspectable UIColor *lgf_BorderColor;
    
    #pragma mark - 边框宽度
    
    @property (assign , nonatomic) IBInspectable CGFloat lgf_BorderWidth;
    
    #pragma mark - 阴影颜色
    
    @property (strong , nonatomic) IBInspectable UIColor *lgf_ShadowColor;
    
    #pragma mark - 阴影圆角
    
    @property (assign , nonatomic) IBInspectable CGFloat lgf_ShadowRadius;
    
    #pragma mark - 阴影偏移量
    
    @property (assign , nonatomic) IBInspectable CGSize lgf_ShadowOffset;
    
    #pragma mark - 阴影透明度
    
    @property (assign , nonatomic) IBInspectable float lgf_ShadowOpacity;
    
    @end
    

    .m 文件

    #import "UIView+LGFGSView.h"
    #import <objc/runtime.h>
    
    static const char *lgf_ViewNameKey = "lgf_ViewNameKey";
    static const char *lgf_CornerRadiusKey = "lgf_CornerRadiusKey";
    static const char *lgf_BorderColorKey = "lgf_BorderColorKey";
    static const char *lgf_BorderWidthKey = "lgf_BorderWidthKey";
    static const char *lgf_ShadowColorKey = "lgf_ShadowColorKey";
    static const char *lgf_ShadowRadiusKey = "lgf_ShadowRadiusKey";
    static const char *lgf_ShadowOffsetKey = "lgf_ShadowOffsetKey";
    static const char *lgf_ShadowOpacityKey = "lgf_ShadowOpacityKey";
    
    @implementation UIView (LGFGSView)
    
    @dynamic lgf_ViewName;
    @dynamic lgf_CornerRadius;
    @dynamic lgf_BorderColor;
    @dynamic lgf_BorderWidth;
    @dynamic lgf_ShadowColor;
    @dynamic lgf_ShadowRadius;
    @dynamic lgf_ShadowOffset;
    @dynamic lgf_ShadowOpacity;
    
    #pragma mark - 控件唯一名字(通常用于确定某一个特殊的view)
    
    - (NSString *)lgf_ViewName {
        return objc_getAssociatedObject(self, lgf_ViewNameKey);
    }
    
    - (void)setLgf_ViewName:(NSString *)lgf_ViewName {
        objc_setAssociatedObject(self, lgf_ViewNameKey, lgf_ViewName, OBJC_ASSOCIATION_COPY_NONATOMIC);
    }
    
    #pragma mark - 圆角
    
    - (CGFloat)lgf_CornerRadius {
        return [objc_getAssociatedObject(self, lgf_CornerRadiusKey) floatValue];
    }
    
    - (void)setLgf_CornerRadius:(CGFloat)lgf_CornerRadius {
        objc_setAssociatedObject(self, lgf_CornerRadiusKey, [NSNumber numberWithFloat:lgf_CornerRadius], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
        self.layer.cornerRadius = lgf_CornerRadius;
    }
    
    #pragma mark - 边框颜色
    
    - (UIColor *)lgf_BorderColor {
        return objc_getAssociatedObject(self, lgf_BorderColorKey);
    }
    
    - (void)setLgf_BorderColor:(UIColor *)lgf_BorderColor {
        objc_setAssociatedObject(self, lgf_BorderColorKey, lgf_BorderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
        self.layer.borderColor = lgf_BorderColor.CGColor;
    }
    
    #pragma mark - 边框宽度
    
    - (CGFloat)lgf_BorderWidth {
        return [objc_getAssociatedObject(self, lgf_BorderWidthKey) floatValue];
    }
    
    - (void)setLgf_BorderWidth:(CGFloat)lgf_BorderWidth {
        objc_setAssociatedObject(self, lgf_BorderWidthKey, [NSNumber numberWithFloat:lgf_BorderWidth], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
        self.layer.borderWidth = lgf_BorderWidth;
    }
    
    #pragma mark - 阴影颜色
    
    - (UIColor *)lgf_ShadowColor {
        return objc_getAssociatedObject(self, lgf_ShadowColorKey);
    }
    
    - (void)setLgf_ShadowColor:(UIColor *)lgf_ShadowColor {
        objc_setAssociatedObject(self, lgf_ShadowColorKey, lgf_ShadowColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
        self.layer.shadowColor = lgf_ShadowColor.CGColor;
    }
    
    #pragma mark - 阴影圆角
    
    - (CGFloat)lgf_ShadowRadius {
        return [objc_getAssociatedObject(self, lgf_ShadowRadiusKey) floatValue];
    }
    
    - (void)setLgf_ShadowRadius:(CGFloat)lgf_ShadowRadius {
        objc_setAssociatedObject(self, lgf_ShadowRadiusKey, [NSNumber numberWithFloat:lgf_ShadowRadius], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
        self.layer.shadowRadius = lgf_ShadowRadius;
    }
    
    #pragma mark - 阴影偏移量
    
    - (CGSize)lgf_ShadowOffset {
        return [objc_getAssociatedObject(self, lgf_ShadowOffsetKey) CGSizeValue];
    }
    
    - (void)setLgf_ShadowOffset:(CGSize)lgf_ShadowOffset {
        objc_setAssociatedObject(self, lgf_ShadowOffsetKey, [NSValue valueWithCGSize:lgf_ShadowOffset], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
        self.layer.shadowOffset = lgf_ShadowOffset;
    }
    
    #pragma mark - 阴影透明度
    
    - (float)lgf_ShadowOpacity {
        return [objc_getAssociatedObject(self, lgf_ShadowOpacityKey) floatValue];
    }
    
    - (void)setLgf_ShadowOpacity:(float)lgf_ShadowOpacity {
        objc_setAssociatedObject(self, lgf_ShadowOpacityKey, [NSNumber numberWithFloat:lgf_ShadowOpacity], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
        self.layer.shadowOpacity = lgf_ShadowOpacity;
    }
    
    @end
    

    最终效果 是不是又可以少加不少代码了
    按照这个逻辑还可以编写其他分类比如(UIViewController)
    把一些不必要重复写的属性都放到storyboard上去钩吧~

    屏幕快照 2018-05-08 下午3.13.12.png

    相关文章

      网友评论

        本文标题:用于storyboard开发 很方便的UIView分类

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