ios - 如何将角半径添加到 UIView 周围的虚线边框
问题描述
我有一个圆形UIView
,我已经添加了一个虚线描边。
,,,
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)
角落被消灭。
解决方案
快速回答
你应该四舍五入Layer
s path
。
像这样:
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
}
}
用法:
addphotoView.addLineDashedStroke(pattern: [2, 2], radius: 16, color: UIColor.gray.cgColor)
推荐阅读
- python - cv2.SIFT() 导致分段错误
- firebase - 将firebase crashlytics与flutter一起使用时出错
- r - R检查列表是否充满NULL的最快方法
- node.js - 如何从postgresql调用自定义函数使用反对js knex js
- python - 如何防止 pyinstaller 报错?
- javascript - 仅在附加时才关注输入
- python - Python 2.7 pip install 失败缺少 pyconfig.h,可能安装的源分发错误?
- mysql - mysql symfony中左连接时如何确定排序字段?
- javascript - 从字典列表中提取值并填充组件
- docker - docker 中的 java 应用程序如何在 ubuntu 18.4 的挂载点中定位文件