1. 給view加圓角很簡(jiǎn)單,直接用下面2句代碼邓萨。
rectView.clipsToBounds = YES;
rectView.layer.cornerRadius = 20;
如下圖:
2. 還可以給view4個(gè)角菊卷,任意設(shè)置圓角
UIRectCorner rectCorner = UIRectCornerTopLeft | UIRectCornerTopRight ;
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rectView.bounds byRoundingCorners:rectCorner cornerRadii:CGSizeMake(20, 20)];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = path.CGPath;
rectView.layer.mask = shapeLayer;
注意:但是在使用masonry設(shè)置view后發(fā)現(xiàn)缔恳,設(shè)置任意角的圓角不起作用洁闰。
這是因?yàn)樵谑褂昧薽asonry之后,view的fream和bounds都是0渴庆,所以在設(shè)置圓角就不會(huì)起作用。
解決方法:
當(dāng)設(shè)置完控件的約束刃滓,需要調(diào)用layoutIfNeeded 函數(shù)進(jìn)行布局耸弄,然后所約束的控件才會(huì)按照約束條件,生成當(dāng)前布局相應(yīng)的frame和bounds计呈。這樣就可以利用這兩個(gè)屬性來進(jìn)行圖片圓角剪裁。
下面是我寫的一個(gè)view分類中的設(shè)置圓角方法
/**
* setCornerRadius 給view設(shè)置圓角
* @param value 圓角大小
* @param rectCorner 圓角位置
**/
- (void)setCornerRadius:(CGFloat)value addRectCorners:(UIRectCorner)rectCorner{
[self layoutIfNeeded];//這句代碼很重要茁彭,不能忘了
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:rectCorner cornerRadii:CGSizeMake(value, value)];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.frame = self.bounds;
shapeLayer.path = path.CGPath;
self.layer.mask = shapeLayer;
}
下面附上關(guān)于autolayout更新幾個(gè)方法的區(qū)別:
setNeedsLayout:告知頁面需要更新扶歪,但是不會(huì)立刻開始更新。執(zhí)行后會(huì)立刻調(diào)用layoutSubviews。
layoutIfNeeded:告知頁面布局立刻更新年枕。所以一般都會(huì)和setNeedsLayout一起使用乎完。如果希望立刻生成新的frame需要調(diào)用此方法,利用這點(diǎn)一般布局動(dòng)畫可以在更新布局后直接使用這個(gè)方法讓動(dòng)畫生效树姨。
layoutSubviews:系統(tǒng)重寫布局
setNeedsUpdateConstraints:告知需要更新約束,但是不會(huì)立刻開始
updateConstraintsIfNeeded:告知立刻更新約束
updateConstraints:系統(tǒng)更新約束