#说明: 封装自定义圆角方向并且可设置投影的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];
#效果如下
