UIBezierPath:roundedRect:byRoundingCorners:cornerRadii:行为很奇怪

pot*_*ato 5 rounded-corners cashapelayer ios uibezierpath

我正在尝试使一个按钮的2个角变圆。如果我选择.TopLeft和.BottomLeft像这样:

let bezierDisableAdsPath = UIBezierPath(roundedRect: disableAdsButton.bounds, byRoundingCorners: [UIRectCorner.TopLeft , UIRectCorner.BottomLeft] , cornerRadii: CGSizeMake(4.0, 4.0))

        let maskAdsLayer = CAShapeLayer()
        maskAdsLayer.frame = disableAdsButton.bounds
        maskAdsLayer.path = bezierDisableAdsPath.CGPath
        disableAdsButton.layer.mask = maskAdsLayer
Run Code Online (Sandbox Code Playgroud)

比代码工作得更好。

如果我选择.TopRight和。像这样的BottomRight:

let bezierDisableAdsPath = UIBezierPath(roundedRect: disableAdsButton.bounds, byRoundingCorners: [UIRectCorner.TopRight , UIRectCorner.BottomRight] , cornerRadii: CGSizeMake(4.0, 4.0))

        let maskAdsLayer = CAShapeLayer()
        maskAdsLayer.frame = disableAdsButton.bounds
        maskAdsLayer.path = bezierDisableAdsPath.CGPath
        disableAdsButton.layer.mask = maskAdsLayer
Run Code Online (Sandbox Code Playgroud)

比我看不到圆角 这里发生了什么?

我已经尝试过将maskAdsLayer添加为子视图,但是它不起作用。

Rob*_*Rob 5

如果你正在做这viewDidLoad,自动布局限制可能没有被这个点开始应用,因此你的按钮的框架可能不会在其最终值,因此disableAdsButton.bounds可能不是你希望它是在该点什么。因此,向右圆角的角可能不可见。您可以通过bounds在此代码运行时记录按钮的 ,然后在布局视图后再次查看它来确认这一点。

您可以通过将其推迟到viewDidAppear或更好地解决此问题viewDidLayoutSubviews