方法 1:使用 CAShapeLayer 和 UIBezierPath
通过创建自定义路径并应用到视图的 layer 上,可以精确控制哪些角是圆角:
import UIKit
extension UIView {
func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
layer.mask = mask
}
}
// 使用示例
let view = UIView(frame: CGRect(x: 50, y: 100, width: 200, height: 150))
view.backgroundColor = .blue
view.roundCorners([.topLeft, .topRight], radius: 20) // 仅左上角和右上角为圆角
方法 2(iOS 11+)直接设置 layer.maskedCorners
iOS 11 及以上版本可以直接通过layer.maskedCorners属性设置圆角:
if #available(iOS 11.0, *) {
view.layer.cornerRadius = 20
view.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] // 左上角和右上角
view.clipsToBounds = true
} else {
// 兼容iOS 10及以下版本
view.roundCorners([.topLeft, .topRight], radius: 20)
}