UIBezierPath 在右上角和右下角不起作用
Posted
技术标签:
【中文标题】UIBezierPath 在右上角和右下角不起作用【英文标题】:UIBezierPath doesn't work in TopRight corner and BottomRight corner 【发布时间】: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
对于您要应用圆角半径的视图是正确的
【参考方案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://***.com/a/41217863/3687902
【讨论】:
这正是 UITableViewCell 的逻辑。非常感谢。我试过的其他方法都没有奏效。【参考方案3】:如果您尝试为在 Storyboard 或 Xib 上设计的 View 设置 RoundingCorners,请将角和 MaskLayer.path 设置为以下方法。
override func viewDidLayoutSubviews()
// here you can write the code...
【讨论】:
以上是关于UIBezierPath 在右上角和右下角不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在自定义 UIView 中动画 UIBezierPath 不起作用
像在绘图应用程序中一样指定具有角半径的 UIBezierPath 点(例如 Sketch)