UIView图层 - 删除一个边框

时间:2017-08-17 11:42:13

标签: ios

我创建了一个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个图层。

基本上你可以在顶部添加一个白色图层来隐藏左边框吗?

你知道吗? 感谢

1 个答案:

答案 0 :(得分:0)

不,你不能通过这种方式隐藏左边框。默认图层的边框始终位于顶部,因此其子图层将被顶层边框覆盖。像这样: enter image description here

所以请将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)

角落将是: enter image description here