iOS 设置圆角小记
在开发中我们经常会遇见设置控件圆角的属性,一般我们有三种处理方式
1、使用CALayer
-(instancetype)cornerAngel:(CGFloat)angel { CALayer* layer=self.layer; layer.cornerRadius=angel; layer.masksToBounds=YES; return self; }
2、使用CAShapeLayer
- (void)setCornerOnTopRightOnBottomLeft:(CGFloat) conner { UIBezierPath *maskPath; maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:(UIRectCornerTopRight | UIRectCornerBottomLeft) cornerRadii:CGSizeMake(conner, conner)]; CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; maskLayer.frame = self.bounds; maskLayer.path = maskPath.CGPath; self.layer.mask = maskLayer; }
3、直接使用图片
对比三种方案
1、只能切四周圆角、使用简便
2、配合UIBezierPath可以剪切任意形状、性能比1好、需要配合UIBezierPath使用、某些情况需要使用setNeedsLayout、layoutIfNeeded 方法。
当设置圆角是在cell上时,不能在cellForRowAtIndexPath方法中直接设置,会有偶发失效问题,应当在willDisplayCell中设置
// 添加刷新标记 [self setNeedsLayout]; // 让当前ruloop立即刷新(不调用这个方法不会立即刷新 会等到View Drawing Cycle循环到这里时才刷新) [self layoutIfNeeded]; // 需要上边两行代码才生效(否则会视图不显示) [self.leftBtn setCornerOnTopRightOnBottomLeft:8]; // 不需要上边两行代码直接生效 // [self.leftBtn cornerAngel:8];
3、省事、但是占用资源