UIView 上的自定义圆角
Posted
技术标签:
【中文标题】UIView 上的自定义圆角【英文标题】:Custom Rounding corners on UIView 【发布时间】:2016-03-18 18:56:00 【问题描述】:所以我一直坚持这一点,在线阅读并尝试了许多不同的解决方案,但无法弄清楚我做错了什么。我想要完成的事情应该很简单:我有一个 UIView,我想把它的左下角和右下角弄圆,以便它们被剪裁而不是被绘制。
这是我目前所拥有的(vwView 是我在屏幕上自定义视图的出口):
var layerTest = CAShapeLayer()
var bzPath = UIBezierPath(roundedRect: vwView.bounds, byRoundingCorners: [.BottomLeft, .BottomRight], cornerRadii: CGSizeMake(10, 10) )
layerTest.path = bzPath.CGPath
vwView.layer.mask = layerTest;
我做错了什么?另外:这只是我的原型,因为我真的很想在 UITableViewCell 上执行此操作,所以如果我需要为此采取不同的方法,那也可能会有所帮助。
谢谢
詹姆斯
【问题讨论】:
似乎对我有用。你得到什么结果? 您是否尝试过设置图层的框架?layerTest.frame = vwView.bounds
?
【参考方案1】:
问题是vwView
稍后会调整大小以适应屏幕,但您没有更新路径以适应其新大小。对此没有特别简单的解决方法。您基本上需要将vwView
设为自定义类(如果还没有的话)并更新layoutSubviews
中的掩码。示例:
public class RoundedBorderView: UIView
public var roundedCorners: UIRectCorner = [ .BottomLeft, .BottomRight ]
didSet self.setNeedsLayout()
public var cornerRadii: CGSize = CGSizeMake(10, 10)
didSet self.setNeedsLayout()
public override func layoutSubviews()
super.layoutSubviews()
updateMask()
private func updateMask()
let mask = maskShapeLayer()
mask.path = UIBezierPath(roundedRect: bounds, byRoundingCorners: roundedCorners, cornerRadii: cornerRadii).CGPath
private func maskShapeLayer() -> CAShapeLayer
if let mask = layer.mask as? CAShapeLayer
return mask
let mask = CAShapeLayer()
layer.mask = mask
return mask
将vwView
的类更改为RoundedBorderView
,它将保持自己的遮罩层。
【讨论】:
谢谢罗伯!这很好用,你的代码很棒!以上是关于UIView 上的自定义圆角的主要内容,如果未能解决你的问题,请参考以下文章
如何在 touchesBegan 上的自定义 UIView 中调整 UILabel 位置?