我创建了一个swift扩展,因此我可以在Interface builder中为UIView添加边框:
@IBDesignable public extension UIView {
@IBInspectable var borderColor:UIColor? {
set {
layer.borderColor = newValue!.cgColor
}
get {
if let color = layer.borderColor {
return UIColor(cgColor: color)
}
else {
return nil
}
}
}
@IBInspectable var borderWidth:CGFloat {
set {
layer.borderWidth = newValue
}
get {
return layer.borderWidth
}
}
@IBInspectable var cornerRadius:CGFloat {
set {
layer.cornerRadius = newValue
clipsToBounds = newValue > 0
}
get {
return layer.cornerRadius
}
}
}
现在我需要删除左侧边框,你是怎么做到的? 我尝试了以下(从以下UIView基类继承)在顶部添加一个白色的图层:
class BaseViewWithLayers: UIView {
var l: CALayer?
override func layoutSubviews() {
l!.frame = CGRect(x: 0, y: 0, width: 1, height: self.frame.size.height)
}
override func awakeFromNib() {
self.l = CALayer()
l?.borderColor = UIColor.red.cgColor
l?.borderWidth = 1
self.layer.insertSublayer(self.l!, above: self.layer)
// self.layer.addSublayer(self.l!)
}
}
请注意:它应该适用于视图的各种动作,这就是我使用`layoutSubviews()
的原因我更喜欢添加一个图层来隐藏一个边框,而不是创建3个图层。
基本上你可以在顶部添加一个白色图层来隐藏左边框吗?
你知道吗? 感谢答案 0 :(得分:0)
不,你不能通过这种方式隐藏左边框。默认图层的边框始终位于顶部,因此其子图层将被顶层边框覆盖。像这样:
所以请将0设置为layer.borderWidth,并手动绘制其他3个边框。
对于cornerRadius,使用CAShapeLayer和UIBezierPath绘制1/4圆圈以实现相同的效果:
let cornerLayer = CAShapeLayer()
cornerLayer.frame = self.bounds
let path = UIBezierPath()
path.move(to: CGPoint(x: 10, y: 0))
path.addArc(withCenter: CGPoint(x: 10, y: 10), radius: 10, startAngle: CGFloat.pi * 3.0 / 2.0, endAngle: CGFloat.pi, clockwise: false)
cornerLayer.strokeColor = UIColor.red.cgColor
cornerLayer.fillColor = UIColor.clear.cgColor
cornerLayer.lineWidth = 1;
cornerLayer.path = path.cgPath
self.layer.addSublayer(cornerLayer)