Ios 如何向UIView周围的虚线边框添加角半径

Ios 如何向UIView周围的虚线边框添加角半径,ios,swift,uiview,calayer,Ios,Swift,Uiview,Calayer,我有一个圆形的ui视图,并在其上添加了一个虚线笔划 ,,, var view = CAShapeLayer() view.strokeColor = UIColor.red.cgColor view.lineDashPattern = [2, 2] view.frame = addphotoView.bounds view.fillColor = nil view.path = UIBezierPath(rect: addphotoView.bou

我有一个圆形的
ui视图
,并在其上添加了一个虚线笔划

,,,
    var view = CAShapeLayer()
    view.strokeColor = UIColor.red.cgColor
    view.lineDashPattern = [2, 2]
    view.frame = addphotoView.bounds
    view.fillColor = nil
    view.path = UIBezierPath(rect: addphotoView.bounds).cgPath
    view.cornerRadius = 16
    view.masksToBounds = true

    addphotoView.layer.addSublayer(yourViewBorder)
但是
view.cornerRadius
未按预期工作:

墙角被擦干净了

快速回答 您应该环绕
s
路径

像这样:

borderLayer.path = UIBezierPath(roundedRect: addphotoView.bounds, byRoundingCorners: .allCorners, cornerRadii: CGSize(width: 16, height: 16)).cgPath


更好的答案是使用扩展名 您可以将所有这些逻辑移到扩展中:

extension UIView {
    @discardableResult
    func addLineDashedStroke(pattern: [NSNumber]?, radius: CGFloat, color: CGColor) -> CALayer {
        let borderLayer = CAShapeLayer()

        borderLayer.strokeColor = color
        borderLayer.lineDashPattern = pattern
        borderLayer.frame = bounds
        borderLayer.fillColor = nil
        borderLayer.path = UIBezierPath(roundedRect: bounds, byRoundingCorners: .allCorners, cornerRadii: CGSize(width: radius, height: radius)).cgPath

        layer.addSublayer(borderLayer)
        return borderLayer
    }
}
用法:

由于视觉问题(我在预览图像时遇到过),我已经更新了您的代码和图像。哦。非常感谢。我会更仔细地记住这一点。我已经尝试了你的答案,在我的例子中,我在水平堆栈中有两个视图,所以虚线从视图中水平伸出。你知道吗?你应该在某个地方更新图层,比如
layoutSubviews
addphotoView.addLineDashedStroke(pattern: [2, 2], radius: 16, color: UIColor.gray.cgColor)