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)