所以我已经在这个问题上停留了一段时间,在线阅读并尝试了许多不同的解决方案,但无法弄清楚我做错了什么。我想要完成的事情应该非常简单:我有一个 UIView,我想将它的左下角和右下角圆化,以便它们被剪裁而不是被绘制。
这是我目前所拥有的(vwView 是我在屏幕上自定义 View 的导出):
var layerTest = CAShapeLayer()
var bzPath = UIBezierPath(roundedRect: vwView.bounds, byRoundingCorners: [.BottomLeft, .BottomRight], cornerRadii: CGSizeMake(10, 10) )
layerTest.path = bzPath.CGPath
vwView.layer.mask = layerTest;
我做错了什么?另外:这只是我的原型(prototype),因为我真的想在 UITableViewCell 上执行此操作,所以如果我需要采用不同的方法,那也会有所帮助。
谢谢
詹姆斯
最佳答案
问题是 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
,它将维护自己的 mask 层。
关于ios - UIView 上的自定义圆角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36092304/