背景:iOS開發(fā)中會經(jīng)常要求切圓角衡怀,常規(guī)圓角好切棍矛,但如果要求切特定位置圓角,比如左邊正常方角抛杨,右邊上下圓角够委。這樣的情況就會麻煩一點。
傳統(tǒng)方法
利用貝塞爾曲線
// 創(chuàng)建一個帶有橢圓形圓角的路徑
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:roundedView.bounds byRoundingCorners: UIRectCornerTopRight | UIRectCornerBottomRight cornerRadii:CGSizeMake(10, 10)];
// 創(chuàng)建一個形狀圖層
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = path.CGPath;
// 將形狀圖層設置為視圖的遮罩
yourView.layer.mask = shapeLayer;
//其中UIRectCornerAllCorners的枚舉值有以下茁帽,你可以根據(jù)自己的需要對特定的圓角裁切
typedef NS_OPTIONS(NSUInteger, UIRectCorner) {
UIRectCornerTopLeft = 1 << 0,
UIRectCornerTopRight = 1 << 1,
UIRectCornerBottomLeft = 1 << 2,
UIRectCornerBottomRight = 1 << 3,
UIRectCornerAllCorners = ~0UL
};
該方法賦值的yourView必須給定frame,如果你是用Masonry庫來給yourView添加約束屈嗤,則需要先執(zhí)行l(wèi)ayoutIfNeeded方法后再賦值貝塞爾曲線遮罩潘拨,否則圓角會因為fram為0而不生效。
[yourView layoutIfNeeded];
快速方法
一句話代碼
yourView.layer.maskedCorners = kCALayerMaxXMinYCorner | kCALayerMaxXMaxYCorner;
添加到view.layer.cornerRadius = xxx;的后面饶号,即可快速指定需要切那個圓角铁追。并且支持Masonry庫,無需指定frame茫船。
完整代碼如下:
UIView *view = [[UIView alloc] init];
view.backgroundColor = [UIColor redColor];
view.layer.cornerRadius = 100;
view.layer.maskedCorners = kCALayerMaxXMinYCorner | kCALayerMaxXMaxYCorner;
[self.view addSubview:view];
[view mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(200, 200));
make.center.mas_equalTo(self.view);
}];