我正在使用UIBezierPath使我的imageview具有圆角,但我也想向imageview添加边框。请记住,顶部是uiimage,底部是标签。

当前使用此代码会产生:

let rectShape = CAShapeLayer()
rectShape.bounds = myCell2.NewFeedImageView.frame
rectShape.position = myCell2.NewFeedImageView.center
rectShape.path = UIBezierPath(roundedRect: myCell2.NewFeedImageView.bounds,
    byRoundingCorners: .TopRight | .TopLeft,
    cornerRadii: CGSize(width: 25, height: 25)).CGPath
myCell2.NewFeedImageView.layer.mask = rectShape

我想为此添加一个绿色边框,但是我不能使用
myCell2.NewFeedImageView.layer.borderWidth = 8
myCell2.NewFeedImageView.layer.borderColor = UIColor.greenColor().CGColor

因为它切断了边框的左上角和右上角,如该图所示:

有没有办法在UIBezierPath以及当前代码中添加边框?

最佳答案

您可以重用UIBezierPath路径并向 View 添加形状层。这是 View Controller 内部的示例。

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Create a view with red background for demonstration
        let v = UIView(frame: CGRectMake(0, 0, 100, 100))
        v.center = view.center
        v.backgroundColor = UIColor.redColor()
        view.addSubview(v)

        // Add rounded corners
        let maskLayer = CAShapeLayer()
        maskLayer.frame = v.bounds
        maskLayer.path = UIBezierPath(roundedRect: v.bounds, byRoundingCorners: .TopRight | .TopLeft, cornerRadii: CGSize(width: 25, height: 25)).CGPath
        v.layer.mask = maskLayer

        // Add border
        let borderLayer = CAShapeLayer()
        borderLayer.path = maskLayer.path // Reuse the Bezier path
        borderLayer.fillColor = UIColor.clearColor().CGColor
        borderLayer.strokeColor = UIColor.greenColor().CGColor
        borderLayer.lineWidth = 5
        borderLayer.frame = v.bounds
        v.layer.addSublayer(borderLayer)
    }

}

最终结果如下所示。

swift - UIBezierPath : How to add a border around a view with rounded corners?-LMLPHP

请注意,这仅在 View 大小固定时才能按预期工作。当 View 可以调整大小时,您将需要创建一个自定义 View 类,并在layoutSubviews中调整图层的大小。

10-05 20:24
查看更多