美文网首页
封装自定义圆角方向并且可设置投影的View

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

作者: CocoaJason | 来源:发表于2018-04-12 14:00 被阅读1088次

说明:

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

Demo地址
https://github.com/MyHZ/HZShapeViewExample

原文件地址:
https://github.com/MyHZ/HZShapeView

CocoaPods支持:

pod 'HZShapeView'

参考文章:
https://www.jianshu.com/p/0754833349a1

源代码

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

相关文章

网友评论

      本文标题:封装自定义圆角方向并且可设置投影的View

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