圆角设置

1、需求

         最近项目中遇到需要在tableview的cell中加入多个圆角的需求,用系统提供的clipsToBounds设置会导致离屏渲染,严重影响性能和客户体验。

2、解决方案

在每一View的layer层中有一个mask属性,他就是专门来设置该View的遮罩效果的。该mask本身也是一个layer层。我们只需要生成一个自定义的layer,然后覆盖在需要遮罩的View上面即可。问题就归于如何生成入上图所示的不规则图片的Layer。CAShapeLayer可以根据设置的条件,产生一个闭合空间的layer,这就是我们常说的贝塞尔曲线。

设置圆角我们采用的方法是:+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii;

3、实现代码

实现方式为实现了CAShapeLayer+ViewMask的ViewMask的Category。

#import "CAShapeLayer+ViewMask.h"

@implementation CAShapeLayer (ViewMask)

+ (instancetype)createMaskLayerWithView:(UIView *)view withRoudCorner:(UIRectCorner)rectCorner withSizeRound:(CGSize)sizeRound{

CGFloat viewWidth = CGRectGetWidth(view.frame);

CGFloat viewHeight = CGRectGetHeight(view.frame);

UIBezierPath * path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, viewWidth, viewHeight) byRoundingCorners:rectCorner cornerRadii:sizeRound];

CAShapeLayer *layer = [CAShapeLayer layer];

layer.path = path.CGPath;

return layer;

}

@end

这个是我自定义的方法,可以通过rectCorner设置想要给view添加四个角中的哪几个角,sizeRound可以设置圆角的弧度。

写在此作为笔记,有什么不对的欢迎大家指正。

你可能感兴趣的:(圆角设置)