UIBezierPath 在右上角和右下角不起作用

UIBezierPath doesn't work in TopRight corner and BottomRight corner

我想将右角圆化,但只适用于左角

let path = UIBezierPath(roundedRect: view.bounds, byRoundingCorners: [UIRectCorner.TopLeft, UIRectCorner.TopRight], cornerRadii: CGSizeMake(20.0, 20.0))
let maskLayer = CAShapeLayer()
    maskLayer.path = path.CGPath
    view.layer.mask = maskLayer
    view.layer.masksToBounds = true

问题是您在针对当前设备调整视图大小之前获取视图的边界。它比稍后出现在屏幕上时要大,因此圆角矩形的右侧不在屏幕右侧。

您需要稍后创建 path 并设置 maskLayer.path,在调整视图大小之后,这意味着在 运行 循环的布局阶段期间或之后。因此,要么将视图子类化并在视图的 layoutSubviews 方法中执行,要么在视图控制器的 viewDidLayoutSubviews 方法中执行。

如果您尝试为在 Storyboard 或 Xib 上设计的 View 设置 RoundingCorners,请设置角并MaskLayer.path进入以下方法。

override func viewDidLayoutSubviews() {
// here you can write the code...
    }

Swift 3

对我有用!

override func layoutSubviews() {
    super.layoutSubviews()
    DispatchQueue.main.async {
       self.containerView.roundCorners(corners: [.topRight,.topLeft], radius: 25)
       self.containerView.layer.masksToBounds = true
    }
    self.layoutIfNeeded()
}

您可以在此处查看方法 "roundCorners":