1.通過(guò)設(shè)置控件layer的cornerRadius來(lái)設(shè)置圓角
self.view.layer.cornerRadius =10.f;//如果設(shè)置圓角角度為半圓屎即,則數(shù)值為控件高度的一半
self.view.layer.masksToBounds = YES;//是否刪除多余的位置
2.通過(guò)貝塞爾曲線來(lái)設(shè)置圓角
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:btn.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:CGSizeMake(10, 10)];
//rect為控件的frame corners為圓角的位置 cornerRadii為圓角的大小
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame =frame;
maskLayer.path = maskPath.CGPath;
btn.layer.mask = maskLayer;
根據(jù)最近有看到資料補(bǔ)充幾點(diǎn):第1種方式屬于離屏渲染 ,在稍微復(fù)雜點(diǎn)界面對(duì)于GPU的開銷會(huì)很大直接點(diǎn)的影響就是會(huì)掉幀屏幕會(huì)卡頓。順便提下觸發(fā)離屏渲染的時(shí)機(jī)
當(dāng)設(shè)置了以下屬性時(shí)皮壁,都會(huì)觸發(fā)離屏繪制:
shouldRasterize(光柵化)
masks(遮罩)
shadows(陰影)
edge antialiasing(抗鋸齒)
group opacity(不透明)
復(fù)雜形狀設(shè)置圓角等
漸變