【问题标题】:UIBezierPath doesn't work in TopRight corner and BottomRight cornerUIBezierPath 在右上角和右下角不起作用
【发布时间】:2016-02-28 17:23:00
【问题描述】:

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

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

【问题讨论】:

  • 我认为您需要发布更多代码,因为您发布的内容本身就是正确的代码。
  • 确保 bounds 对于您要应用圆角半径的视图是正确的

标签: swift uibezierpath


【解决方案1】:

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

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

【讨论】:

  • 谢谢!很长一段时间以来,我一直想知道为什么左角被正确渲染,而右角却不正确。
  • 这真是一个糟糕的错误!
【解决方案2】:

斯威夫特 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”方法:https://stackoverflow.com/a/41217863/3687902

【讨论】:

  • 这正是 UITableViewCell 的逻辑。非常感谢。我试过的其他方法都没有奏效。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2021-08-21
    • 2018-03-01
    • 2013-12-22
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多