自己实现同时带有圆角和阴影的View

2016-12-05  本文已影响21人  這Er
#import <UIKit/UIKit.h>

/**
 *  按钮类型
 */
typedef NS_ENUM(NSInteger, CardLoanBaseButtonStyle) {
    
    // 深蓝色
    CardLoanBaseButtonStyleBlue,
};

/**
 2.0 基类button
 */
@interface CardLoanBaseButton : UIButton

/**
 Button样式
 */
@property (nonatomic, assign) CardLoanBaseButtonStyle style;

/**
 Button
 */
@property (nonatomic, strong) UIColor *maskColor;

/**
 *  初始化 button
 */
+ (instancetype)buttonWithFrame:(CGRect)frame buttonStyle:(CardLoanBaseButtonStyle)buttonStyle;

@end

@interface CardLoanBaseButton ()

/**
 Masklayer
 */
@property (nonatomic, strong) CAShapeLayer *maskLayer;

@end

@implementation CardLoanBaseButton

+ (instancetype)buttonWithFrame:(CGRect)frame buttonStyle:(CardLoanBaseButtonStyle)buttonStyle {
    
    CardLoanBaseButton *button = [self buttonWithType:UIButtonTypeCustom];
    button.frame = frame;
    button.style = buttonStyle;
    
    return button;
}

- (void)setStyle:(CardLoanBaseButtonStyle)style {
    
    _style = style;
    
    switch (_style) {
        case CardLoanBaseButtonStyleBlue: {
            
            self.maskColor = UIColorFromRGB(0x574ef2);
            [self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
            [self setTitleColor:[UIColor colorWithWhite:1 alpha:.2] forState:UIControlStateDisabled];
            
            self.titleEdgeInsets = UIEdgeInsetsMake(0, 0, self.height * .2, 0);
        }
        break;
        
        default:
        break;
    }
}

- (void)layoutSubviews {
    [super layoutSubviews];
    
    [self setShandowAndCurveRect];
}

/**
 添加圆角和阴影
 */
- (void)setShandowAndCurveRect {
    
    CGFloat radius = self.height * .5;
    UIBezierPath *path = [UIBezierPath bezierPath];
    [path setLineWidth:.5];
    [path moveToPoint:CGPointMake(radius, 0)];
    [path addLineToPoint:CGPointMake(self.width - radius, 0)];
    [path addArcWithCenter:CGPointMake(self.width - radius, radius) radius:radius startAngle:- M_PI_2 endAngle:M_PI_2 clockwise:YES];
    [path addLineToPoint:CGPointMake(radius, self.height)];
    [path addArcWithCenter:CGPointMake(radius, radius) radius:radius startAngle:M_PI_2 endAngle:M_PI_2 * 3 clockwise:YES];
    [path closePath];
    self.maskLayer.frame = self.bounds;
    self.maskLayer.strokeColor = self.maskColor.CGColor;
    self.maskLayer.fillColor = self.maskColor.CGColor;
    self.maskLayer.path = path.CGPath;
    [self.layer insertSublayer:self.maskLayer atIndex:0];
    
    self.maskLayer.shadowOffset = CGSizeMake(0, self.height * .1);
}

- (CALayer *)maskLayer {
    if (_maskLayer == nil) {
        _maskLayer = [CAShapeLayer layer];
        self.maskLayer.shadowColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:.8].CGColor;
        self.maskLayer.shadowOpacity = 0.8;
    }
    return _maskLayer;
}

@end

上一篇下一篇

猜你喜欢

热点阅读