在UIView上自定义舍入angular

所以我一直坚持这一点,阅读并尝试了许多不同的解决scheme在线,但无法弄清楚我做错了什么。 我想要完成的任务应该非常简单:我有一个UIView,我想绕其左下angular和右下angular进行裁剪,而不是绘制。

这是我到目前为止(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上做到这一点,所以如果有不同的方法,我需要考虑这一点,这也可能是有帮助的。

谢谢

詹姆士

问题在于vwView稍后resize以适合屏幕,但不会更新path以获取新大小。 对此没有特别的解决办法。 您基本上需要使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 ,它将维护自己的遮罩层。