说明:
封装自定义圆角方向并且可设置投影的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];
效果如下
![](https://img.haomeiwen.com/i1286284/10ef2121090863d2.png)
网友评论