给控件做圆角效果在开发中很常见,我们都知道直接用layer的方法也是可以裁剪的,但是性能不是很好,下面我给出两个常用的用UIBezierPath来裁剪圆角的方法。
一、全角(四个角都做裁剪)
/*
view:裁剪的控件
cornerRadius:圆角的大小
*/
+(void)cutCornerRadius:(UIView *)view andRadius:(CGFloat)cornerRadius{
UIBezierPath *maskPath;
maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds
cornerRadius:cornerRadius];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = view.bounds;
maskLayer.path = maskPath.CGPath;
view.layer.mask = maskLayer;
}
二、指定一个角来裁剪
/*
view:裁剪的控件
cornerRadii:圆角的尺寸
corners:圆角的位置
*/
+(void)cutCornerRadius:(UIView *)view andCornerRadii:(CGSize)cornerRadii andAtRectCorner:(UIRectCorner)corners{
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:corners cornerRadii:cornerRadii];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = view.bounds;
maskLayer.path = maskPath.CGPath;
view.layer.mask = maskLayer;
}
用法示例:
[TPPublicMethod cutCornerRadius:_bgView andRadius:10];
[TPPublicMethod cutCornerRadius:_bgView andCornerRadii:CGSizeMake(4, 4) andAtRectCorner:UIRectCornerBottomLeft|UIRectCornerBottomRight];
UIRectCorner说明:
typedef NS_OPTIONS(NSUInteger, UIRectCorner) {
UIRectCornerTopLeft = 1 << 0,左上角
UIRectCornerTopRight = 1 << 1,右上角
UIRectCornerBottomLeft = 1 << 2,左下角
UIRectCornerBottomRight = 1 << 3,右下角
UIRectCornerAllCorners = ~0UL
};