在iOS11之前,view展示圓角的處理過程為:
//Objective-C
UIView *view0 = [[UIView alloc]initWithFrame:CGRectMake(30, 100, 200, 40)];
view0.backgroundColor = [UIColor grayColor];
view0.layer.cornerRadius = 15;
//view0.clipsToBounds = YES;
view0.layer.masksToBounds = YES;
[self.view addSubview:view0];
//swift
let view = UIView()
view.clipsToBounds = true
view.layer.cornerRadius = 10
view.frame = .init(x: 30, y: 100, width: 200, height: 40)
view.backgroundColor = UIColor.lightGray
self.view.addSubview(view)
如此,便可以顯示一個圓角的view:
image.png
iOS11對圓角功能進行了改善,layer新增了maskedCorners屬性:
@property CACornerMask maskedCorners
CA_AVAILABLE_STARTING (10.13, 11.0, 11.0, 4.0);
CACornerMask是一個結構體類型:
typedef NS_OPTIONS (NSUInteger, CACornerMask)
{
kCALayerMinXMinYCorner = 1U << 0,
kCALayerMaxXMinYCorner = 1U << 1,
kCALayerMinXMaxYCorner = 1U << 2,
kCALayerMaxXMaxYCorner = 1U << 3,
};
該屬性用于設置view哪個角顯示圓角:
//Objective-C
if (@available(iOS 11.0, *)) {
view2.layer.maskedCorners = kCALayerMaxXMaxYCorner | kCALayerMaxXMinYCorner;
} else {
// Fallback on earlier versions
}
//swift
view2.layer.maskedCorners = [.layerMaxXMaxYCorner,.layerMinXMaxYCorner]
設置該屬性便可以指定view圓角顯示:
image.png
此外,iOS11中,view圓角的圓角也支持動畫:
//Objective-C
[UIView animateWithDuration:2 delay:1.0 options:UIViewAnimationOptionCurveLinear animations:^{
view1.layer.cornerRadius = 0;
} completion:nil];
//swift
UIViewPropertyAnimator.init(duration: 1.0, curve: .linear) {
view3.layer.cornerRadius = 0
}.startAnimation()
311-3.gif
在iOS11之前,圓角是不支持UIView動畫的。