封装自定义圆角方向并且可设置投影的View

365 阅读1分钟

#说明: 封装自定义圆角方向并且可设置投影的View 通过传入不同的圆角方向以及圆角半径来实现

点击查看Demo

点击查看源文件 参考文章

CocoaPods支持:

pod 'HZShapeView'

#源代码

typedef NS_OPTIONS(NSUInteger, UIRectCorner) {
    UIRectCornerTopLeft     = 1 << 0,     //左上角
    UIRectCornerTopRight    = 1 << 1,    //右上角
    UIRectCornerBottomLeft  = 1 << 2,    //左下角
    UIRectCornerBottomRight = 1 << 3,    //右下角
    UIRectCornerAllCorners  = ~0UL    //全部
};
@interface HZShapeView : UIView

/**
 创建带自定义圆角的View
 
 @param frame View的frame
 @param corners 圆角的方向
 @param cornerRadii CGSIze width为圆角的大小
 @return View
 */
+ (instancetype)ShapeViewFrame:(CGRect)frame
             byRoundingCorners:(UIRectCorner)corners
                   cornerRadii:(CGSize)cornerRadii;

- (instancetype)initWithFrame:(CGRect)frame
            byRoundingCorners:(UIRectCorner)corners
                  cornerRadii:(CGSize)cornerRadii;

@end
@interface HZShapeView()

@property (nonatomic, assign) UIRectCorner corners;
@property (nonatomic, assign) CGSize cornerRadii;

@end

@implementation HZShapeView

+ (Class)layerClass
{
    return [CAShapeLayer class];
}

-(void)layoutSubviews
{
    [super layoutSubviews];
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:self.corners cornerRadii:self.cornerRadii];
    ((CAShapeLayer *)self.layer).path = maskPath.CGPath;
}

- (void)setBackgroundColor:(UIColor *)backgroundColor
{
    ((CAShapeLayer *)self.layer).fillColor = backgroundColor.CGColor;
}

- (instancetype)initWithFrame:(CGRect)frame byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii;
{
    if (self = [super initWithFrame:frame])
    {
        self.cornerRadii = cornerRadii;
        self.corners = corners;
        self.backgroundColor = [UIColor whiteColor];
    }
    return self;
}

+ (instancetype)ShapeViewFrame:(CGRect)frame
             byRoundingCorners:(UIRectCorner)corners
                   cornerRadii:(CGSize)cornerRadii;
{
    
    return [[HZShapeView alloc] initWithFrame:frame byRoundingCorners:corners cornerRadii:cornerRadii];
}

@end

#在ViewController中调用

    HZShapeView* shapeView = [HZShapeView ShapeViewFrame:CGRectMake(100, 200, 300, 100) byRoundingCorners:UIRectCornerAllCorners cornerRadii:CGSizeMake(10, 100)];
    shapeView.layer.shadowColor = [UIColor redColor].CGColor;
    shapeView.layer.shadowOffset = CGSizeMake(0.f, 0.f);
    shapeView.layer.shadowOpacity = 3.f;
    [self.view addSubview:shapeView];

#效果如下

Simulator Screen Shot - iPhone 8 Plus - 2018-04-12 at 14.00.05.png