某个角设置为圆角
在 iOS 11 上,系统为 CALayer 提供了一个新属性 maskedCorners ,它可以指定设置哪些角为圆角,这个属性总共有四个值可供选择,也可以组合使用:
- layerMinXMinYCorner:左上角
- layerMaxXMinYCorner:右上角
- layerMinXMaxYCorner:左下角
- layerMaxXMaxYCorner:右下角
假如我们需要左上角和右下角为圆角,其他两个角为直角,只需要这样设置:
customView.layer.cornerRadius = 20
customView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMaxYCorner]
效果如下
iOS 11 以下版本兼容
如果你的 App 支持 iOS 11 以下的版本,就不能使用 maskedCorners 了,另一个变通的办法是使用 layer 上的 mask 属性,相当于在 UIView 上加了一层圆角遮罩。
首先利用贝塞尔曲线 UIBezierPath 画出一个左上角和右下角带有圆角的矩形路径,然后创建一个新的 layer CAShapeLayer,并把其 path 属性设置为贝塞尔曲线的 path,最后把 customView 的 mask 设置为这个新的 layer。
let corners: UIRectCorner = [.topLeft, .bottomRight]
let radii = CGSize(width: 20, height: 20)
let path = UIBezierPath(roundedRect: customView.bounds, byRoundingCorners: corners, cornerRadii: radii)
let mask = CAShapeLayer()
mask.path = path.cgPath
customView.layer.mask = mask