我正在尝试在视图周围创建边框。为此,我使用视图大小的UIBezierPath创建一个图层,并使用笔触颜色创建另一个图层。然后,我将bezier图层分配给笔触颜色图层,并将其作为子图层添加到视图中。
以前有人遇到过吗?
class ViewController: UIViewController {
@IBOutlet weak var rectangleView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let bezierLayer = CAShapeLayer()
bezierLayer.bounds = rectangleView.frame
bezierLayer.position = rectangleView.center
bezierLayer.path = UIBezierPath(rect: rectangleView.bounds).cgPath
let borderLayer = CAShapeLayer()
borderLayer.bounds = rectangleView.frame
borderLayer.position = rectangleView.center
borderLayer.fillColor = UIColor.clear.cgColor
borderLayer.strokeColor = UIColor.black.cgColor
borderLayer.lineWidth = 1
borderLayer.path = bezierLayer.path
rectangleView.layer.addSublayer(borderLayer)
}
}
如果有人想知道约束可能是错误的,这里是情节提要配置:
我能够解决它,诀窍是像这样将边界实现放在viewDidLayoutSubviews
中:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
rectangleView.layer.sublayers?.forEach {
guard let layer = $0 as? CAShapeLayer else { return }
layer.removeFromSuperlayer()
}
let bezierLayer = CAShapeLayer()
bezierLayer.frame = rectangleView.bounds
bezierLayer.path = UIBezierPath(rect: rectangleView.bounds).cgPath
let borderLayer = CAShapeLayer()
borderLayer.frame = rectangleView.bounds
borderLayer.fillColor = UIColor.clear.cgColor
borderLayer.strokeColor = UIColor.black.cgColor
borderLayer.lineWidth = 1
borderLayer.path = bezierLayer.path
rectangleView.layer.addSublayer(borderLayer)
}