Swift ——设置UIView某个圆角

218 阅读1分钟

方法 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)
}