美文网首页
iOS任意圆角

iOS任意圆角

作者: 心语风尚 | 来源:发表于2018-06-27 11:25 被阅读160次

    有的人想到 可以在方法里面直接调用哪个控件用就在哪里调用  但是不推荐 因为用到的控件 可能是UILabel、UIBUtton、UIView等 而且为了 贴近系统属性设置的特点   最好是给UIView加分类

    使用 (注意,由于基于Layer 控件的背景色用我提供的dj_backgroundColor)

        UIView *view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 160, 100)];

        view.dj_backgroundColor = [UIColor redColor];

        view.dj_shadowColor    = [UIColorblackColor];

        view.dj_shadowOffset    =CGSizeMake(0,6);

        view.dj_shadowRadius    =6;

        view.dj_shadowOpacity  =0.6;

        view.dj_corners        =UIRectCornerTopLeft | UIRectCornerBottomLeft;

        view.dj_radius          =25;

        [self.viewaddSubview:view];

    分类的.h

    /**

      圆角

     */

    @property (nonatomic, assign) CGFloat      dj_radius;

    /**

      圆角位置

     */

    @property (nonatomic, assign) UIRectCorner dj_corners;

    /**

      阴影偏移量

     */

    @property(nonatomic,assign)CGSize      dj_shadowOffset;

    /**

      阴影透明度

     */

    @property(nonatomic,assign)CGFloat      dj_shadowOpacity;

    /**

      阴影圆角

     */

    @property(nonatomic,assign)CGFloat      dj_shadowRadius;

    /**

      阴影颜色

     */

    @property(nonatomic,strong)UIColor    *dj_shadowColor;

    /**

      背景颜色(必须使用该属性设定背景颜色)

     */

    @property(nonatomic,strong)UIColor    *dj_backgroundColor;

    分类的.m

    #import "UIView+DJRandomRadius.h"

    #import

    staticvoid*bezierPathKey      = &bezierPathKey;

    staticvoid*shapeLayerKey      = &shapeLayerKey;

    staticvoid*radiusKey          = &radiusKey;

    staticvoid*cornersKey        = &cornersKey;

    staticvoid*shadowColorKey    = &shadowColorKey;

    staticvoid*shadowOffsetKey    = &shadowOffsetKey;

    staticvoid*shadowRadiusKey    = &shadowRadiusKey;

    staticvoid*shadowOpacityKey  = &shadowOpacityKey;

    staticvoid*backgroundColorKey = &backgroundColorKey;

    @interface UIView ()

    @property (nonatomic, strong) UIBezierPath *bezierPath;

    @property (nonatomic, strong) CAShapeLayer *shapeLayer;

    @end

    staticCGFloat      _radius;

    static UIRectCorner _corners;

    @implementationUIView (DJRandomRadius)

    - (void)shouldStructElement {

        [self.bezierPath removeAllPoints];

        [self.shapeLayer removeFromSuperlayer];

        self.bezierPath = nil;

        self.shapeLayer = nil;

        self.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.0];

        self.bezierPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:_corners cornerRadii:CGSizeMake(_radius, _radius)];

        self.shapeLayer= [[CAShapeLayeralloc]init];

        self.shapeLayer.path = self.bezierPath.CGPath;

        self.shapeLayer.frame = self.bounds;

        [self.layer addSublayer:self.shapeLayer];

        self.shapeLayer.fillColor = !self.dj_backgroundColor ? [UIColor whiteColor].CGColor : self.dj_backgroundColor.CGColor;

        self.shapeLayer.shadowColor = self.dj_shadowColor.CGColor;

        self.shapeLayer.shadowOffset = self.dj_shadowOffset;

        self.shapeLayer.shadowOpacity = self.dj_shadowOpacity;

        self.shapeLayer.shadowRadius = self.dj_shadowRadius;

    }

    - (void)setDj_corners:(UIRectCorner)dj_corners {

        _corners= dj_corners;

        [self shouldStructElement];

        objc_setAssociatedObject(self, &cornersKey, @(dj_corners), OBJC_ASSOCIATION_RETAIN);

    }

    - (UIRectCorner)dj_corners {

        return [objc_getAssociatedObject(self, &cornersKey) integerValue];

    }

    - (void)setDj_radius:(CGFloat)dj_radius {

        _radius= dj_radius;

        [self shouldStructElement];

        objc_setAssociatedObject(self, &radiusKey, @(dj_radius), OBJC_ASSOCIATION_RETAIN);

    }

    - (CGFloat)dj_radius {

        return [objc_getAssociatedObject(self, &radiusKey) floatValue];

    }

    - (void)setDj_shadowOffset:(CGSize)dj_shadowOffset {

        self.shapeLayer.shadowOffset= dj_shadowOffset;

        objc_setAssociatedObject(self, &shadowOffsetKey, @(dj_shadowOffset), OBJC_ASSOCIATION_RETAIN);

    }

    - (CGSize)dj_shadowOffset {

        return [objc_getAssociatedObject(self, &shadowOffsetKey) CGSizeValue];

    }

    - (void)setDj_shadowOpacity:(CGFloat)dj_shadowOpacity {

        self.shapeLayer.shadowOpacity= dj_shadowOpacity;

        objc_setAssociatedObject(self, &shadowOpacityKey, @(dj_shadowOpacity), OBJC_ASSOCIATION_RETAIN);

    }

    - (CGFloat)dj_shadowOpacity {

        return [objc_getAssociatedObject(self, &shadowOpacityKey) floatValue];

    }

    - (void)setDj_shadowRadius:(CGFloat)dj_shadowRadius {

        self.shapeLayer.shadowRadius= dj_shadowRadius;

        objc_setAssociatedObject(self, &shadowRadiusKey, @(dj_shadowRadius), OBJC_ASSOCIATION_RETAIN);

    }

    - (CGFloat)dj_shadowRadius {

        return [objc_getAssociatedObject(self, &shadowRadiusKey) floatValue];

    }

    - (void)setDj_shadowColor:(UIColor*)dj_shadowColor {

        self.shapeLayer.shadowColor= dj_shadowColor.CGColor;

        objc_setAssociatedObject(self, &shadowColorKey, dj_shadowColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    }

    - (UIColor*)dj_shadowColor {

        return objc_getAssociatedObject(self, &shadowColorKey);

    }

    - (void)setDj_backgroundColor:(UIColor*)dj_backgroundColor {

        self.shapeLayer.fillColor= dj_backgroundColor.CGColor;

        objc_setAssociatedObject(self, &backgroundColorKey, dj_backgroundColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    }

    - (UIColor*)dj_backgroundColor {

        return objc_getAssociatedObject(self, &backgroundColorKey);

    }

    - (void)setBezierPath:(UIBezierPath*)bezierPath {

        objc_setAssociatedObject(self, &bezierPathKey, bezierPath, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    }

    - (UIBezierPath*)bezierPath {

        return objc_getAssociatedObject(self, &bezierPathKey);

    }

    - (void)setShapeLayer:(CAShapeLayer*)shapeLayer {

        objc_setAssociatedObject(self, &shapeLayerKey, shapeLayer, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    }

    - (CAShapeLayer*)shapeLayer {

        return objc_getAssociatedObject(self, &shapeLayerKey);

    }

    相关文章

      网友评论

          本文标题:iOS任意圆角

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