Bezierpath 按钮宽度问题
Posted
技术标签:
【中文标题】Bezierpath 按钮宽度问题【英文标题】:Bezierpath button width issue 【发布时间】:2017-12-26 03:45:21 【问题描述】:func roundCorners(_ corners: UIRectCorner, radius: CGFloat)
let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask
我正在使用此函数为UIButton
提供特定侧的圆角半径。我将此函数调用为UITableViewCell
,但我遇到了像这样的问题. 但它没有改变,并且按钮正在从其宽度中切割。
我在TableviewCell
调用这个函数
override func layoutSubviews()
super.layoutSubviews()
self.btnWithdraw.roundCorners([.bottomRight], radius: 4.0)
self.btnAddFund.roundCorners([.bottomLeft], radius: 4.0)
但是这里的问题就像它是按照情节提要视图控制器中给出的原始帧,而按钮没有按照约束的宽度。
任何帮助将不胜感激。 谢谢
【问题讨论】:
在 ios 9 中,按钮具有仅圆角的固有能力,无需遮罩。 好的,如果我的应用程序支持 ios 8,我该怎么办? @马特 把你的代码放在里面,drawReact
【参考方案1】:
也许问题在于您假设在重新布置 按钮 的所有情况下都会在 cell 上调用 layoutSubviews
。这可能不是真的。
为避免这种假设,请按照以下方式在按钮本身中实现整个屏蔽:
class MyButton : UIButton
var whatCorners : UIRectCorner = [.bottomRight]
var whatRadius : CGFloat = 4.0
func roundCorners(_ corners: UIRectCorner, radius: CGFloat)
let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask
override func layoutSubviews()
super.layoutSubviews()
self.roundCorners(self.whatCorners, radius: self.whatRadius)
这样,您可以为每个按钮指定 whatCorners
和 whatRadius
的所需值,然后按钮将自行圆整。
【讨论】:
以上是关于Bezierpath 按钮宽度问题的主要内容,如果未能解决你的问题,请参考以下文章
在 Tableview 中使用 BezierPath 创建时间线视图
为啥`[bezierPath closePath]`方法没有关闭我的路径?
如何在Swift中的BezierPath之后为imageView的点1到2和点2到3设置不同的animation.duration时间?