如何为 UIView 添加圆角半径
Posted
技术标签:
【中文标题】如何为 UIView 添加圆角半径【英文标题】:How to add corner radius for UIView 【发布时间】:2020-02-15 09:50:42 【问题描述】:我必须设置一些 UIView 的圆角半径,并通过以下代码进行设置:
@IBDesignable
class MyUIviewCorner: UIView
override func layoutSubviews() setup()
func setup()
let r = self.bounds.size.height / 2
let path = UIBezierPath(roundedRect: self.bounds,
byRoundingCorners: [.topLeft, .topRight],
cornerRadii: CGSize(width: r, height: r))
let mask = CAShapeLayer()
mask.backgroundColor = UIColor.clear.cgColor
mask.path = path.cgPath
layer.borderWidth = 1.5
layer.borderColor = UIColor.red.cgColor
self.layer.mask = mask
但我得到了这个结果:
我不明白为什么顶角有空格?
如果我设置底角半径,我会得到:
【问题讨论】:
您只想要一个顶角为圆角的红色矩形吗? 是的,我做清扫车 在此处查看我的答案***.com/a/46408735/5575955 124 位来自用户的有用投票... 【参考方案1】:您不应该为此使用掩码,您可以简单地使用 layer.maskedCorners
属性。
layer.cornerRadius = r
layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
【讨论】:
【参考方案2】:如果你增加边框宽度,你会明白为什么:
在创建的图层绘制的圆角矩形“顶部”似乎还有一个填充矩形,覆盖了圆角。
你可以通过UIBezierPath
s 来实现你想要的:
override func draw(_ rect: CGRect)
let r = self.bounds.size.height / 2
let path = UIBezierPath(roundedRect: self.bounds,
byRoundingCorners: [.topLeft, .topRight],
cornerRadii: CGSize(width: r, height: r))
path.lineWidth = 1.5
UIColor.red.setStroke()
path.stroke()
【讨论】:
以上是关于如何为 UIView 添加圆角半径的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Xcode 8 将 UIView 作为具有圆角半径的圆